Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Как завершить работу другого приложения раньше Windows   Найти похожие ветки 

 
p_evghenii   (2007-12-17 12:32) [0]

Такая задача: есть два приложения, постоянно выполняющиеся в фоновом режиме: одно "мое" и одно "не мое". При завершении работы Windows "мое" приложение отслеживает это и завершает работу "не моего приложения". Проблема в том, что неизвестно, к какому приложению раньше придет сообщение о завершении Винды, т.е. мне надо, чтобы "мое" приложение раньше получало это сообщение и именно оно и завершало работу "не моего". Но получается, что часто сообщение приходит раньше не "к моему" приложению, а мне это не надо, т.к. "не мое" приложение тогда задает не нужный вопрос пользователю.


 
Leonid Troyanovsky ©   (2007-12-17 12:38) [1]


> p_evghenii   (17.12.07 12:32)  

> Такая задача: есть два приложения, постоянно выполняющиеся
> в фоновом режиме: одно "мое" и одно "не мое".

Если "не мое" - оконное, то можно зацепить его хуком.

--
Regards, LVT.


 
Сергей М. ©   (2007-12-17 12:39) [2]

Т.е. задача сводится твоего приложения к изменению поведения чужого приложения при получении им WM_QUERYENDSESSION ?


 
homm ©   (2007-12-17 12:46) [3]

> [1] Leonid Troyanovsky ©   (17.12.07 12:38)
> Если "не мое" - оконное, то можно зацепить его хуком

а если е оконное, то и никаких вопросов оно пользователю задавать не может :)


 
p_evghenii   (2007-12-17 12:50) [4]

>>Т.е. задача сводится твоего приложения к изменению поведения чужого приложения при получении им WM_QUERYENDSESSION

Совершенно верно. Только мне хочется, чтобя я получал WM_QUERYENDSESSION раньше, чем "не мое" приложение.
Оно оконное.


 
Leonid Troyanovsky ©   (2007-12-17 13:05) [5]


> homm ©   (17.12.07 12:46) [3]

> а если е оконное, то и никаких вопросов оно пользователю
> задавать не может :)

Например, консольное, with HandlerRoutine.

--
Regards, LVT.


 
p_evghenii   (2007-12-17 14:08) [6]

Ответ не понял. "Не мое" приложение - оконное


 
DiamondShark ©   (2007-12-17 14:26) [7]

SetWindowsHookEx с параметром WH_GETMESSAGE и лови получение WM_QUERYENDSESSION "не твоим" приложением.


 
Leonid Troyanovsky ©   (2007-12-17 14:54) [8]


> DiamondShark ©   (17.12.07 14:26) [7]

> SetWindowsHookEx с параметром WH_GETMESSAGE и лови получение
> WM_QUERYENDSESSION

The WM_QUERYENDSESSION message is sent,
а не post, т.е., WH_CALLWNDPROC*

--
Regards, LVT.


 
p_evghenii   (2007-12-17 15:14) [9]

Извините за глупый вопрос: как использовать SetWindowsHookEx, в каком месте кода внедрять?


 
DiamondShark ©   (2007-12-17 15:36) [10]


> в каком месте кода внедрять?

В том, который выполняется заведомо до завершения работы системы.


 
p_evghenii   (2007-12-17 17:17) [11]

Можно примерчик? пробовал создать что-то по примерам, что здесь нашел, но винда зависает...


 
Leonid Troyanovsky ©   (2007-12-18 11:44) [12]


> p_evghenii   (17.12.07 17:17) [11]

> Можно примерчик? пробовал создать что-то по примерам

Плохо создал or плохой пример.
Показывай созданное.

--
Regards, LVT.


 
p_evghenii   (2007-12-18 12:41) [13]

var
 hook: HHook;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
 if wparam = WM_QueryEndSession then
   showmessage("No");
 Result := CallNextHookEx(hook, Code, wParam, lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 hook := SetWindowsHookEx(WH_CALLWNDPROC, @CbtProc, HInstance, 0);
end;


 
Сергей М. ©   (2007-12-18 12:46) [14]


> p_evghenii   (18.12.07 12:41) [13]


1. Функция CbtProc() должна быть объявлена и реализована в dll.

2. значение, лежащее впеременной hook, д.б. доступно всем процессам, в АП которых внедрен образ хук-библиотеки.

3. ShowMessage в теле функции не допустим.


 
Leonid Troyanovsky ©   (2007-12-18 13:01) [15]


> p_evghenii   (18.12.07 12:41) [13]

>  hook := SetWindowsHookEx(WH_CALLWNDPROC, @CbtProc, HInstance,
>  0);

Во-первых, см [14].
Во-вторых, глобальный хук не нужен, т.е., не 0, а threadID того "не моего".
В-третьих, message находится не в wparam, а lparam: CWPRETSTRUCT.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
15-1219198234
Slider007
2008-08-20 06:10
2008.10.12
С днем рождения ! 20 августа 2008 среда


15-1219304588
TRSteep
2008-08-21 11:43
2008.10.12
vbs скрипт и принтеры


2-1220622285
Demo_nik
2008-09-05 17:44
2008.10.12
Как поределить путь к каталогу в котором нахожусь?


15-1219145496
keymaster
2008-08-19 15:31
2008.10.12
Как правильнее?


3-1207818824
AlexeyMir
2008-04-10 13:13
2008.10.12
SQL-запрос