[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] [已解决]如何用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"值呢??

问过很多人都没有高招,这里的大神多也很热心,还是在这里求助,看看是否有变通之法??



这问题我遇过

写程序的方法:

TRegistry.Create(KEY_WOW64_64KEY) 需加 (KEY_WOW64_64KEY) 参数,
这样 X86 程序就能读到正确 Reg

TOP

本帖最后由 locoman 于 2021-9-6 19:45 编辑

回复 2# peterboy666


嗯,您这个遭遇很重要!!
那么,请教您具体点怎么加呢?
比如:原来的代码是这样的:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" | find "AutoAdminLogon"
加在哪里?怎么加?
谢谢您依据上面的代码修改一下,拜托!!

TOP

回复  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 做后续的处理.

TOP

简单正确的解决办法是:使用reg的隐秘参数/reg:32和/reg:64,即可应对不同的注册表操作了。

TOP

返回列表