Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать Hook на выключение компьютера [D5, D6, Win95/98, NT4, Win2k, WinXP]


Страницы:   1 2

Sergey N ©   (2004-04-01 11:46:00) 

Доброе время суток!

Задача: Создать программку, перехватывающую сообщение о выключении/перезагрузке машины и в зависимости от решения пользователя либо продолжить данную операцию, либо просто ее игнорировать.
 Понимаю, что это делается с помощью SetWindowsHookEx, но не знаю как ее применить. Либо подменять функцию ExitWindow, или вешаться на какое-то сообщение.. Как подойти?
  Может есть скелет программы у кого?

Спасибо все отреагировавшим!


Sergey N   (2004-04-02 08:21:00) [21]

to sir John: Если я не ошибаюсь, то ето нельзя сделать в экзешнике, нуно внедрять DLL в другие адрессные пространства..

to all: Может тогда по порядку начнем? Есть API ExitWindowEx(). Как она работает, какие сообщения посылает (если посылает), и как ее перехватить, если она вызывается в каком-то процессе в системе?


Wiz@rd   (2004-04-01 23:45:00) [22]

У решета все дыры не закроешь


Alexander666   (2004-04-01 19:06:00) [23]

Собственно, можно перехватить функцию NtSystemShutdown


VMcL   (2004-04-01 18:36:00) [24]

2 [4]

WM_QUERYENDSESSION, а не WM_ENDSESSION. И то см. [5].


Wiz@rd   (2004-04-01 18:31:00) [25]

Ето не спасёт даже от такой ламеской вещи как EWX_FORCE, не говоря уж об NtSystemShutdown, или тем более о записи в регистры из Ring0


sir John   (2004-04-01 17:15:00) [26]

Может быть это поможет? Для того, чтобы определить выключение/перезагрузку ОС можно ловить WM_EndSession сообщение

type
 TForm1 = class(TForm)
 private
   procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
 public
 end;

implementation

{$R *.DFM}

procedure TForm1.WMEndSession(var Msg: TWMEndSession);
begin
 if Msg.EndSession = True then
   ShowMessage('Windows is shutting down!');
 inherited;
end;


BiN   (2004-04-01 17:03:00) [27]

Понимаю, что это делается с помощью SetWindowsHookEx, но не знаю как ее применить

На этом сайте есть статья на эту тему


Sergey N   (2004-04-01 16:55:00) [28]

Спасибо за совет.. Если бы смог по нему разобраться, то и не обращался бы..


VMcL   (2004-04-01 15:54:00) [29]

см. GINA @ http://msdn.microsoft.com/


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо