设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3569|回复: 6
打印 上一主题 下一主题

[已经解决] 读取注册表键值

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1210
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

跳转到指定楼层
1
发表于 2010-8-14 08:28:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 DeathKing 于 2010-8-15 21:35 编辑

譬如读取HKEY_LOCAL_MACHINE\SOFTWARE\Enterbrain\RGSS2\RTP下RPGVX的值。

能用标准库最好,API王道 = =
能说明一下Win7之类的会不会限制掉这个什么的。恩,只读取,不写入,我们不做流氓软件做得事

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

2
发表于 2010-8-14 09:10:42 | 只看该作者
http://tech.sina.com.cn/s/2005-07-25/1113672164.shtml

好吧,只能提供这个。

然后等 紫苏大来解释~~~~ >_<

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

3
发表于 2010-8-14 09:41:13 | 只看该作者
我记得好像是秀秀写过这东西。
-.-
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2010-8-14 09:43:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
5
发表于 2010-8-14 10:01:59 | 只看该作者
参数表看不懂
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1210
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

6
 楼主| 发表于 2010-8-14 10:24:31 | 只看该作者
翻了翻手册,WIN32OLE、Win32::Registry 都可以,可惜RGSS没有这些东西。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
7
发表于 2010-8-15 12:34:35 | 只看该作者
注:据 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 路径:
  1. RegOpenKeyEx = Win32API.new('advapi32', 'RegOpenKeyEx', 'lpiip', 'l')
  2. RegQueryValueEx = Win32API.new('advapi32', 'RegQueryValueEx', 'lppppp', 'l')
  3. RegCloseKey = Win32API.new('advapi32', 'RegCloseKey', 'l', 'l')

  4. hKey, data, cbData = '    ', '    ' * 32, [128].pack('l')
  5. RegOpenKeyEx.call(-2147483646, 'SOFTWARE\Wow6432Node\Enterbrain\RGSS2\RTP', 0, 0x20019, hKey)
  6. hKey = hKey.unpack('l')[0]
  7. RegQueryValueEx.call(hKey, 'RPGVX', 0, 0, data, cbData)
  8. p RegCloseKey.call(hKey)
  9. p data
复制代码
其中 Wow6432Node 是 64 位 Windows 才会有的一个节点,32 位的 Enterbrain 直接在 SOFTWARE 键下

评分

参与人数 1星屑 +700 收起 理由
DeathKing + 700 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-13 03:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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