Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перейти на определенный ключ в RegEdit

Delphi , ОС и Железо , Реестр

Перейти на определенный ключ в RegEdit

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

unit Unit1;

 interface

 uses
   Windows, Messages, Classes, Controls, Forms, StdCtrls;

 type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
     procedure JumpToKey(Key: string);
   private
     { Private declarations }
   public
     { Public declarations }
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.dfm}

 uses
   ShellAPI;

 procedure TForm1.JumpToKey(Key: string);
 var
   i, n: Integer;
   hWin: HWND;
   ExecInfo: ShellExecuteInfoA;
 begin
   hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil);
   if hWin = 0 then
   {if Regedit doesn't run then we launch it}
   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);
     WaitForInputIdle(ExecInfo.hProcess, 200);
     hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil);
   end;
   ShowWindow(hWin, SW_SHOWNORMAL);
   hWin := FindWindowExA(hWin, 0, PChar('SysTreeView32'), nil);
   SetForegroundWindow(hWin);
   i := 30;
   repeat
     SendMessageA(hWin, WM_KEYDOWN, VK_LEFT, 0);
     Dec(i);
   until i = 0;
   Sleep(500);
   SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
   Sleep(500);
   i := 1;
   n := Length(Key);
   repeat
     if Key[i] = '\' then
     begin
       SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
       Sleep(500);
     end
     else
       SendMessageA(hWin, WM_CHAR, Integer(Key[i]), 0);
     i := i + 1;
   until i = n;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   JumpToKey('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer');
 end;

 end.

Это программное обеспечение на языке Delphi, которое автоматизирует редактор реестра Windows (RegEdit), чтобы перейти к конкретному ключу. Процедура JumpToKey принимает строковый параметр, представляющий путь к ключу, и навигирует RegEdit к этому ключу.

Разбивка процесса:

  1. Если RegEdit не запущен, программа запускает его с помощью функции ShellExecuteExA.
  2. Затем она находит основное окно RegEdit с помощью функции FindWindowA.
  3. Программа устанавливает фокус на контроле "Системная дерево-представление" в основном окне RegEdit с помощью функций SetForegroundWindow и FindWindowExA.
  4. Она использует цикл для имитации нажатия левой стрелки 30 раз, чтобы вернуться к началу дерева реестра.
  5. Затем она имитирует нажатие правой стрелки один раз, чтобы перейти к корню дерева реестра.
  6. Программа итерирует каждый символ в строке ввода, имитируя ввод каждого символа с помощью функции SendMessageA с сообщением WM_CHAR.
  7. Если встречается символ обратной косой черты (\), она имитирует нажатие правой стрелки, чтобы перейти к следующему поддереву.

Процедура Button1Click просто вызывает процедуру JumpToKey с конкретным путем как аргументом.

Однако есть некоторые ограничения и потенциальные проблемы:

  • Она зависит от установки и регистрации RegEdit на системе.
  • Она использует низкоуровневую манипуляцию окнами, что может быть хрупким и склонным к нарушению, если изменяются UI RegEdit.
  • Программа предполагает, что путь registry key в формате "HKEY_[LOCAL_MACHINE|CURRENT_USER][SUBKEY]", но не проверяет или очищает строковый параметр.

Если вам нужно более надежное решение, рассмотрите использование COM-ориентированных API (например, Windows.Registry) для взаимодействия с реестром программно.

В статье описывается способ перехода к конкретному ключу в реестре Windows с помощью программного кода на языке Delphi, используя приложение RegEdit.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 07:54:39/0.0077431201934814/1