有没有人写过一些delphi代码来执行REGJUMP的工作?

Owe*_*ter 3 delphi path regedit

有没有人写过一些delphi代码来执行REGJUMP的工作?

具体来说,REGJUMP是一个MS应用程序,它允许您打开regedit到指定的值/键路径(准备在regedit中查看或编辑).例如:regjump HKLM\Software\Microsoft\Windows将在路径HKLM\Software\Microsoft\Windows中打开regedit.

我试过了:

ShellExecute(handle,'Open','C:\WINDOWS\regedit.exe', nil, nil, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

这当然只会打开您所看到的最后一条路径.

我试过了:

ShellExecute(handle,'Open','C:\WINDOWS\regedit.exe', '[HKLM\Software\Microsoft\Windows]', nil, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

但是试图将价值导入路径 - 由于各种原因而失败 - 并且不是我想要做的事情.

Mar*_*ynA 10

我想你会发现在Regedit中访问的最后一个注册表项保存在注册表中的LastKey值下

HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\RegEdit
Run Code Online (Sandbox Code Playgroud)

至少在Windows10中.

所以,我会尝试在调用ShellExecute之前写入我想要访问的值.

示例代码:

program RegJumpTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Registry;
var
  Reg : TRegistry;
  LastKey,
  KeyToFind,
  ValueToWrite : String;
begin
  ValueToWrite := ParamStr(1);
  KeyToFind := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit';
  Reg := TRegistry.Create;
  if Reg.KeyExists(KeyToFind) then
    writeln('found ', KeyToFind)
  else
    writeln('not found ', KeyToFind);

  if Reg.OpenKey(KeyToFind, False) then
    writeln(KeyToFind, ' opened ok')
  else begin
    writeln('failed to open key: ', KeyToFind);
    Halt(1);
  end;
  LastKey := Reg.ReadString('LastKey');
  writeln('Last key: >', LastKey, '<');

  Reg.WriteString('LastKey', ValueToWrite);
  readln;
end.
Run Code Online (Sandbox Code Playgroud)