标题:
[注册表类]
[已解决]如何用32位的应用程序去读写64位系统的注册表??
[打印本页]
作者:
locoman
时间:
2021-9-6 18:06
标题:
[已解决]如何用32位的应用程序去读写64位系统的注册表??
本帖最后由 locoman 于 2021-9-6 23:24 编辑
如何用32位的应用程序去读写64位系统的注册表??
需求:
通过查询注册表值去判断检查“要使用本机,用户需输入用户名和密码(E)”项的勾选状态。
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" | find "AutoAdminLogon"
但是,但是,这条语句是放在一个32位的应用程序中去读取系统注册表的。
经过实测发现:
1. 在WIN7-32位中,一切正常。
2. 在win10-64位中,就读取不到了!!
win10-64位中实测发现:
1. 未能正常读取(结果是空白的);
2. 实测发现:这个32位应用程序在上面的查询代码下,却是去读取了另一个位置的信息了——
HKEY_LOCAL_MACHINE\SOFTWARE
\WOW6432Node\
Microsoft\Windows NT\CurrentVersion\Winlogon
所以,读取不到所需信息的!!
——通过实际对比发现:这个32位程序在WIN10-64位中读取时,自动在代码中间多了一串东东
\WOW6432Node
。
——那么,将原来的代码也串上\WOW6432Node,这个32位程序是能读取到信息了,但是,但是,它的信息根本与“要使用本机,用户需输入用户名和密码(E)”项的勾选状态并无关系,所以,没有任何实际作用,目标不能实现了。
——在WIN10-64中,真正与“要使用本机,用户需输入用户名和密码(E)”项的勾选状态关联的还是原来那个代码中注册表的位置("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon")。
——请教:
那个32位的应用程序是没法弃用和改变的了,请教可否通过代码调整,在WIN10-64位中读取到真正有效的"AutoAdminLogon"值呢??
问过很多人都没有高招,这里的大神多也很热心,还是在这里求助,看看是否有变通之法??
作者:
peterboy666
时间:
2021-9-6 19:28
这问题我遇过
以
写程序
的方法:
TRegistry.Create(KEY_WOW64_64KEY) 需加 (
KEY_WOW64_64KEY
) 参数,
这样 X86 程序就能读到
正确
Reg
作者:
locoman
时间:
2021-9-6 19:43
本帖最后由 locoman 于 2021-9-6 19:45 编辑
回复
2#
peterboy666
嗯,您这个遭遇很重要!!
那么,请教您具体点怎么加呢?
比如:原来的代码是这样的:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" | find "AutoAdminLogon"
加在哪里?怎么加?
谢谢您依据上面的代码修改一下,拜托!!
作者:
peterboy666
时间:
2021-9-6 19:49
回复 peterboy666
嗯,您这个遭遇很重要!!
那么,请教您具体点怎么加呢?
比如:原来的代码是这 ...
locoman 发表于 2021-9-6 19:43
Delphi 语法:
Reg := TRegistry.Create(KEY_WOW64_64KEY); // TRegistry 须 uses Registry,Windows
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows NT\CurrentVersion') then
你用
任何语言
写个 CMD Console 程序,
返回
给 BAT 做后续的处理.
作者:
locoman
时间:
2021-9-6 23:23
简单正确的解决办法是:使用reg的隐秘参数/reg:32和/reg:64,即可应对不同的注册表操作了。
欢迎光临 批处理之家 (http://www.bathome.net/)
Powered by Discuz! 7.2