找回密码
 加入
搜索
楼主: aliske

求获取注册表时间的方法【悬赏100元,送完为止】

 火.. [复制链接]
 楼主| 发表于 2008-6-15 06:17:08 | 显示全部楼层
lpftLastWriteTime 中
记录的好像是两个时间值
包括子键的创建时间和最近写入时间
用你的函数得出的时间值和用手动导出的对比来看
似乎慢了8个小时

昏,评分一次最多只能给5元

[ 本帖最后由 aliske 于 2008-6-15 06:39 编辑 ]

评分

参与人数 1金钱 +1 收起 理由
kakinkgb + 1 lpftLastWriteTime 中包括两个时间值?MSDN上 ...

查看全部评分

发表于 2008-6-15 13:30:29 | 显示全部楼层
可以在这里查找其他的注册表值:
http://doc.ddart.net/msdn/header/include/winreg.h.html
aliske你要悬赏100元,我可是帮你省了不少钱啊
 楼主| 发表于 2008-6-15 15:34:19 | 显示全部楼层
还剩77块
也准备发了
 楼主| 发表于 2008-6-15 15:59:53 | 显示全部楼层
#define HKEY_CLASSES_ROOT           (( HKEY ) 0x80000000 )
#define HKEY_CURRENT_USER           (( HKEY ) 0x80000001 )
#define HKEY_LOCAL_MACHINE          (( HKEY ) 0x80000002 )
#define HKEY_USERS                  (( HKEY ) 0x80000003 )
#define HKEY_PERFORMANCE_DATA       (( HKEY ) 0x80000004 )
#if(WINVER >= 0x0400)
#define HKEY_CURRENT_CONFIG         (( HKEY ) 0x80000005 )
#define HKEY_DYN_DATA               (( HKEY ) 0x80000006 )

如果是具体的字符如:
HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt
或者包含变量"HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt\"&$keyname
又该如何转呢?
发表于 2008-6-16 19:33:10 | 显示全部楼层
#Include <Array.au3>
#include <Date.au3>
const $HKEY_LOCAL_MACHINE = 0x80000002
const $KEY_READ = 0x20019
$lpName=DllStructGetPtr(DllStructCreate('char'))
$lpcName=DllStructGetPtr(DllStructCreate('short'))
$lpClass=DllStructGetPtr(DllStructCreate('char'))
$lpcClass=DllStructGetPtr(DllStructCreate('short'))

;$time=DllStructCreate('char')
$time=DllStructCreate($tagFILETIME);稍微修改
$lpftLastWriteTime=DllStructGetPtr($time)

dim $lpSubKey = 'SOFTWARE\Microsoft'
$phkResult=DllStructGetPtr(DllStructCreate('char'))
$yy=dllcall('Advapi32.dll','long','RegOpenKeyEx','ptr',$HKEY_LOCAL_MACHINE,'str',$lpSubKey,'byte',0,'ptr',$KEY_READ,'int*',$phkResult)
;_ArrayDisplay ($yy)

for $dwIndex= 0 to 5
$tt=dllcall('Advapi32.dll','long','RegEnumKeyEx','ptr',$yy[5],'int',$dwIndex,'str',$lpName,'dword*',$lpcName,'byte',0,'str',$lpClass,'dword*',$lpcClass,'int',$lpftLastWriteTime)
_ArrayAdd ($tt,_Date_Time_FileTimeToStr ($Time))
_ArrayDisplay ($tt)
next
$ww=dllcall('Advapi32.dll','long','RegCloseKey','ptr',$yy[5])
;_ArrayDisplay ($ww)

一帖给5元,你当我5毛啊,多加些!
为什么我得到的时间会晚8小时捏?高手们给看看啊

[ 本帖最后由 kakinkgb 于 2008-6-17 21:58 编辑 ]

评分

参与人数 1金钱 +5 收起 理由
aliske + 5 论坛限制了,我想多给也没办法

查看全部评分

 楼主| 发表于 2008-6-17 13:20:07 | 显示全部楼层
兄台莫急,是你的都会给你的!
发表于 2009-11-24 09:37:20 | 显示全部楼层

评分

参与人数 1金钱 -10 收起 理由
afan -10 警告,禁止纯表情!

查看全部评分

发表于 2009-11-24 12:12:14 | 显示全部楼层
继续等待 高手出招!~
发表于 2009-11-24 15:19:52 | 显示全部楼层
RegOpenKey, NtQueryKey两个函数足矣,不必枚举。
发表于 2009-12-31 14:48:42 | 显示全部楼层
继续等待 高手出招!~
发表于 2010-1-1 01:52:48 | 显示全部楼层
本帖最后由 阿福 于 2010-1-1 01:58 编辑

新年到,参考kakinkgb写的改改,给自己赚点压岁钱,^_^。
HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_USER,HKEY_CLASSES_ROOT,HKEY_CURRENT_CONFIG都支持。

自定义函数:_RegKeyMon

用法一:列出"HKEY_CURRENT_USER\SoftWare\MicroSoft"所有子项目及时间
$a_reg = _RegKeyMon("HKEY_CURRENT_USER\SoftWare\MicroSoft")
Select
        Case UBound($a_reg,2)=0
                MsgBox(0,0,"获取出错")
        Case $a_reg[0][0]<1
                MsgBox(0,0,"该键无子键或无此键")
        Case Else
                _ArrayDisplay($a_reg)
EndSelect


用法二:只列出"HKEY_CURRENT_USER\SoftWare\MicroSoft"的时间
$a_reg = _RegKeyMon("HKEY_CURRENT_USER\SoftWare\MicroSoft", True)
Select
        Case UBound($a_reg,2)=0
                MsgBox(0,0,"获取出错")
        Case $a_reg[0][0]<1
                MsgBox(0,0,"该键无子键或无此键")
        Case Else
                _ArrayDisplay($a_reg)
EndSelect

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 2威望 +10 金钱 +300 贡献 +65 收起 理由
kn007 + 10 + 100 + 55
afan + 200 + 10 老帖了,楼主不会关注了吧~ 分由我来加吧 : ...

查看全部评分

发表于 2010-1-1 09:22:24 | 显示全部楼层
过于高深了点 望尘莫及啊~~
发表于 2010-1-1 11:08:44 | 显示全部楼层
这个不错 可以根据这个来做一些东东了 呵呵
发表于 2010-1-1 18:52:16 | 显示全部楼层
再贴一种方案~
#include <Date.au3>
#include <LocalSecurityAuthority.au3>

Local $sRegKey, $hKey, $pBuffer, $tTime64, $sTime

$sRegKey = "Software\Microsoft\Windows"
$hKey = _RegOpenKeyEx(0x80000002, $sRegKey, 0x20019) ; 0x80000002 = HKLM
If Number($hKey) < 1 Then Exit

_ZwQueryKey($hKey, 0, $pBuffer, 1024)
_RegCloseKey($hKey)

$tTime64 = _Date_Time_FileTimeToLocalFileTime($pBuffer)
$sTime = _Date_Time_FileTimeToStr($tTime64)

_HeapFree($pBuffer)
Msgbox(0, $sRegKey, $sTime)


Func _ZwQueryKey($hKey, $iClass, ByRef $pBuffer, $iSizeofBuffer)
        Local $iResult

        $pBuffer = _HeapAlloc($iSizeofBuffer)
        $iResult = DllCall("Ntdll.dll", "dword", "ZwQueryKey", "hWnd", $hKey, _
                        "ulong", $iClass, "ptr", $pBuffer, "dword", $iSizeofBuffer, "dword*", 0)
        Return SetError(_LsaNtStatusToWinError($iResult[0]), $iResult[5], $iResult[0] = 0)
EndFunc        ;==>_ZwQueryKey
发表于 2010-1-1 19:17:25 | 显示全部楼层
收藏之..........
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-1-12 08:56 , Processed in 0.098983 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表