Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1200314667
opoloxai
2008-01-14 15:44
2008.10.12
DBGrid -> OnKeyDown


2-1220071019
KIT
2008-08-30 08:36
2008.10.12
Из Interbase в Delphi 7


15-1219138424
MBo
2008-08-19 13:33
2008.10.12
Вот как люди, всю душу вкладывая, переменные "отчищают" ;)


2-1220629617
New_ser
2008-09-05 19:46
2008.10.12
Как программно переместить курсор в Edit?


15-1218900402
Andy BitOff
2008-08-16 19:26
2008.10.12
...примерно в сто тысяч раз большей скорости света





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский