- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
uses
ShellAPI;
procedure TForm1.JumpToKey(Key: string; value:string);
var
i, n: Integer;
hWin, htWin, hlWin: HWND;
ExecInfo: ShellExecuteInfoA;
begin
hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil); // не стоит вызывать Ansi-варианты. Лучше вызывать как есть ("FindWindow")
if hWin = 0 then
begin
FillChar(ExecInfo, 60, #0);
with ExecInfo do
begin
cbSize := 60;
fMask := SEE_MASK_NOCLOSEPROCESS;
lpVerb := PChar('open');
lpFile := PChar('regedit.exe');
nShow := 1;
end;
ShellExecuteExA(@ExecInfo);
sleep(500);
WaitForInputIdle(ExecInfo.hProcess, 200);
hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil);
end;
ShowWindow(hWin, SW_SHOWNORMAL);
htWin := FindWindowExA(hWin, 0, PChar('SysTreeView32'), nil);
SetForegroundWindow(htWin);
i := 30;
sleep(700);
repeat
WaitForInputIdle(ExecInfo.hProcess, 200);
SendMessageA(htWin, WM_KEYDOWN, VK_LEFT, 0);
Dec(i);
until i = 0;
sleep(700);
WaitForInputIdle(ExecInfo.hProcess, 200);
SendMessageA(htWin, WM_KEYDOWN, VK_RIGHT, 0);
sleep(700);
i := 1;
n := Length(Key);
repeat
WaitForInputIdle(ExecInfo.hProcess, 200);
if Key[i] = '\' then
begin
SendMessageA(htWin, WM_KEYDOWN, VK_RIGHT, 0);
end
else
SendMessageA(htWin, WM_CHAR, Integer(Key[i]), 0);
i := i + 1;
until i = n;
sleep(500);
WaitForInputIdle(ExecInfo.hProcess, 200);
if value <> '' then
begin
hlWin := FindWindowExA(hWin, 0, PChar('SysListView32'), nil);
SetForegroundWindow(hlWin);
i := 30;
repeat
//WaitForInputIdle(ExecInfo.hProcess, 200);
SendMessageA(hlWin, WM_KEYDOWN, VK_LEFT, 0);
Dec(i);
until i = 0;
i := 1;
n := Length(value);
repeat
//WaitForInputIdle(ExecInfo.hProcess, 200);
SendMessageA(hlWin, WM_CHAR, Integer(value[i]), 0);
i := i + 1;
until i = n;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
JumpToKey('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Current\Version\Run','CTFMON.EXE');
end;
Такая вот рыбка ;-) Открывает редактор и разворачивает ключи до заданного параметра.
Код не мой. Оригинал разворачивал только до названия ключа.
zombiee 08.08.2016 07:36 # +9
fajes_rown 08.08.2016 12:48 # +9