冥界3大法王 发表于 2021-5-14 09:05

为啥第二段的执行结果不正确?

uses
registry;

procedure TForm3.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
with TRegistry.Create do
begin
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;                        //设置根键
    if OpenKey('\SOFTWARE\Python', True) then                //打开子键
    begin
      if not keyexists('PythonCore') then
      ShowMessage('存在')
      else
      ShowMessage('不存在');
    end;
    Free;
end;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
reg: TRegistry;
begin
with TRegistry.Create do
begin
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if OpenKey('\SOFTWARE\WOW6432Node\Python', True) then
    begin
      if keyexists('PythonCore') then
      ShowMessage('存在')
      else
      ShowMessage('不存在');
    end;
    Free;
end;
end;

xinyuguy 发表于 2021-5-14 09:17

你是要写 什么呢

冥界3大法王 发表于 2021-5-14 09:22

xinyuguy 发表于 2021-5-14 09:17
你是要写 什么呢

@xinyuguy
判断以下根键值是否存在?
HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore
HKLM\SOFTWARE\WOW6432Node\Python\PythonCore

boxer 发表于 2021-5-14 09:47

delphi?你的兴趣很广泛啊

冥界3大法王 发表于 2021-5-14 09:49

boxer 发表于 2021-5-14 09:47
delphi?你的兴趣很广泛啊

直接换武器:
AHK的正确代码:


SetRegView 64
RegRead, OutputVar1, HKEY_LOCAL_MACHINE, SOFTWARE\Python\PythonCore, SupportUrl
if OutputVar=''
        MsgBox,64位的不存在
else
        MsgBox,64位的存在`n%OutputVar1%


SetRegView 32
RegRead, OutputVar2, HKEY_LOCAL_MACHINE, SOFTWARE\WOW6432Node\Python\PythonCore, SupportUrl
if OutputVar =
        MsgBox,32位的不存在
else
        MsgBox,32位的存在`n%OutputVar2%

wslans 发表于 2021-5-14 09:50

DELPHI大小写敏感的不?WOW6432Node是不是不对?

冥界3大法王 发表于 2021-5-14 09:59

wslans 发表于 2021-5-14 09:50
DELPHI大小写敏感的不?WOW6432Node是不是不对?

注册表键值不都大小写混搭的
我网上试了几种代码,32位版的识别结果都是不正确的
换虚拟机也一个结果

wslans 发表于 2021-5-14 10:14

本帖最后由 wslans 于 2021-5-14 10:16 编辑

不是那个意思,注册表里Wow6432Node是这样的大小写(我的是这样的,你的不知道是不是不一样),你的 代码OW大写了,你写的是WOW6432Node,如果这部分是大小写敏感的话,你的代码查找的键肯定是不存在的了,DELPHI不清楚,你 把WOW6432Node改成Wow6432Node试试

冥界3大法王 发表于 2021-5-14 10:28

wslans 发表于 2021-5-14 10:14
不是那个意思,注册表里Wow6432Node是这样的大小写(我的是这样的,你的不知道是不是不一样),你的 代码OW ...

试了一下,还是不行。{:301_972:}

冥界3大法王 发表于 2021-5-14 10:36

试了一下,下面的代码就是可以的,但是换了那个路径下,就读取不到了,或许是因为权限问题吧。
奶奶的,我可是默认管理员权限,其他也是全开的。

var
   ARegistry : TRegistry;
  begin
   ARegistry := TRegistry.Create;
   with ARegistry do
    begin
   RootKey := HKEY_LOCAL_MACHINE;
   if OpenKey( ′Software\Microsoft\Windows\CurrentVersion′,false ) then
   begin
   memo1.lines.add('Windows版本:′+ ReadString(′Version′));
   memo1.lines.add('Windows版本号:′+ ReadString(′VersionNumber′));
   memo1.lines.add(′Windows子版本号:′+ ReadString(′SubVersionNumber′));
   end;
   CloseKey;
   Destroy;
   end;
  end;
页: [1] 2
查看完整版本: 为啥第二段的执行结果不正确?