Форум: "WinAPI";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизКак завершить работу другого приложения раньше 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c