赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
注:据 MSDN 所说,RegOpenKey 等不带 Ex 后缀的函数已废弃,但为了兼容 win16 程序仍然保留了接口,现在的应用程序应该统一用带 Ex 后缀的这些函数(RegCloseKey 除外)
LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__reserved DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);
这个函数用来打开一个注册表键的句柄,用于之后获取注册表键的值
hKey 是一个输入参数,指定了需要打开的注册表父键句柄,可以用预定义的宏,其中 HKEY_LOCAL_MACHINE 的值是 -2147483646
lpSubKey 是一个字符串,指定了子键的值
ulOptions 是系统保留参数,必须传递 0
samDesired 是你想要有的针对打开的注册表键的权限,如果该注册表键的安全描述符不允许调用进程(RM)拥有这样的权限则函数失败
phkResult 是输出参数,接收打开的子键句柄
LONG WINAPI RegQueryValueEx(
__in HKEY hKey,
__in_opt LPCTSTR lpValueName,
__reserved LPDWORD lpReserved,
__out_opt LPDWORD lpType,
__out_opt LPBYTE lpData,
__inout_opt LPDWORD lpcbData
);
这个函数可以用来获取某个注册表键所对应的值
hKey 指定该注册表键的句柄
lpValueName 指定值的名称(因为注册表是一个多重映射)
lpReserved 是系统保留参数,必须传递 0
lpType 接收该值的类型,如果不需要则传递 NULL
lpData 接收值,如果不需要则传递 NULL
lpcbData 指定了 lpData 缓冲区大小
LONG WINAPI RegCloseKey(
__in HKEY hKey
);
关闭注册表键句柄,释放资源
hKey 是之前通过 RegOpenKeyEx 获取的键句柄
读取 RTP 路径:- RegOpenKeyEx = Win32API.new('advapi32', 'RegOpenKeyEx', 'lpiip', 'l')
- RegQueryValueEx = Win32API.new('advapi32', 'RegQueryValueEx', 'lppppp', 'l')
- RegCloseKey = Win32API.new('advapi32', 'RegCloseKey', 'l', 'l')
- hKey, data, cbData = ' ', ' ' * 32, [128].pack('l')
- RegOpenKeyEx.call(-2147483646, 'SOFTWARE\Wow6432Node\Enterbrain\RGSS2\RTP', 0, 0x20019, hKey)
- hKey = hKey.unpack('l')[0]
- RegQueryValueEx.call(hKey, 'RPGVX', 0, 0, data, cbData)
- p RegCloseKey.call(hKey)
- p data
复制代码 其中 Wow6432Node 是 64 位 Windows 才会有的一个节点,32 位的 Enterbrain 直接在 SOFTWARE 键下 |
评分
-
查看全部评分
|