Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2008, 22:39   #1
Dmitriy_ZDO
Пользователь
 
Аватар для Dmitriy_ZDO
 
Регистрация: 27.08.2008
Сообщений: 12
Лампочка RegEdit из Delphi

Привет!
Задача такова: нужно открыть из делфи RegEdit, но не просто открыть, а еще переместить на нужный ключ. Как открыть его, я сделал, а как открыть на нужном мне ключе - не знаю .
Я понял, что регедит где-то сохраняет свой последний открытый ключ, но почему то просмотр логов в RegMonitor'e и FileMonitor'e ничего не дали.
Заранее благодарен за подсказку в решении проблемы!
С уважением, Dmitriy_ZDO.
Dmitriy_ZDO вне форума Ответить с цитированием
Старый 27.08.2008, 22:51   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
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.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 27.08.2008, 23:57   #3
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

2 Dmitriy_ZDO:
Ты абсолютно прав. Я из интереса продизасмил Regedit.exe и оказалось,что при запуске он обращается в ключе

Код HTML:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
к строковому параметру под именем "LastKey".
Судя по названию параметра его тебе и нужно юзать.
бороться и искать
найти и перепрятать.
Minimus вне форума Ответить с цитированием
Старый 28.08.2008, 12:16   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ozerich жесть =)
Я думал есть какой-то параметр, типа передаёшь редактору при запуске - и он открывается на нужном ключе =(
Интересно аналогичная функция в autoruns от Руссиновича так же "в лоб" реализована?
пыщь
JTG вне форума Ответить с цитированием
Старый 28.08.2008, 18:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Да похоже этот RegEdit в MS украли... Или писали пьяные админы... ;-(
за одно то, что у него есть ключи командной строки, о которых с помощью RegEdit'а нельзя узнать - только за одно это можно (и нужно!!) расстреливать!
А наличие ещё дополнительной программы REG.exe для обработки команд???!..

Вот, нагуглил решения задачи, в том числе и, в первую очередь, там есть то, что нашёл/предложил Minimus можно посмотреть здесь - How to jump to a registry key directly

удачи.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.08.2008, 19:44   #6
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

2 JTG - самая жестяная жесть!
Опять-таки из чистого любопытства я выяснил следующее:
1.В autoruns от Руссиновича практически один в один все происходит так, как это описал Ozerich.
2.Зато в RegLWTScan перед запуском экземпляра regedit устанавливается вышеупомянутый параметр реестра.

2 Serge_Bliznykov:
Это ты удачно нагуглил.
Судя по содержанию ссылки получается что прежде чем устанавливать значение ключа нужно убить все работающие экземпляры режедита - иначе не сработает. Ну кто-бы мог подумать!
бороться и искать
найти и перепрятать.

Последний раз редактировалось Minimus; 28.08.2008 в 20:25.
Minimus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54