S
solova
Есть программа:
на ней туллбар с кнопкой[выход]
закрытие на "крестик" или Alt+F4 приводит к сворачиванию в трей
в окне есть меню, и один из пунктов [выход]
Так вот проблема такая.
Через хук пытаюсь узнать о закрытии этой программы.
Нажатие на кнопку [выход] - "ОК"
Закрытие на "крестик" или Alt+F4 - не имеет смысла т.к. не закрывает, а сворачивает
Выход через меню иконки в трее - "ОК"
Выход через системное меню(МouseRButt на макушке окна,вуаля->менюшка)- ОЧЕНЬ НЕ "ОК"<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код обработки сообщений хуком</div></div><div class="sp-body"><div class="sp-content">
Можно ли отследить закрытие через системное меню?
Добавлено:При закрытии через системное меню пишет такой лог<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Spy++ LOG</div></div><div class="sp-body"><div class="sp-content">S WM_MENUSELECT uItem:57665 fuFlags... hmenu:...[wParam:A080E141 lParam:...]
P WM_LBUTTONDOWN...
S WM_MENUSELECT(меню закрывается)
P WM_SYSCOMAND uCmdType:E140 xPos... yPos...[wParam:0000E141 lParam:...]
P WM_CLOSE но хук этот WM_CLOSE не ловит почему то
Добавлено: у меня хук (WH_CALLWNDPROC) он вообще ловит что то системное кроме [Min] [Max] [Exit]
Я его ставлю на поток, а системное меню относится к нему?
на ней туллбар с кнопкой[выход]
закрытие на "крестик" или Alt+F4 приводит к сворачиванию в трей
в окне есть меню, и один из пунктов [выход]
Так вот проблема такая.
Через хук пытаюсь узнать о закрытии этой программы.
Нажатие на кнопку [выход] - "ОК"
Закрытие на "крестик" или Alt+F4 - не имеет смысла т.к. не закрывает, а сворачивает
Выход через меню иконки в трее - "ОК"
Выход через системное меню(МouseRButt на макушке окна,вуаля->менюшка)- ОЧЕНЬ НЕ "ОК"<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код обработки сообщений хуком</div></div><div class="sp-body"><div class="sp-content">
C++:
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *cwp=(CWPSTRUCT*)lParam;
switch(cwp->message)
{
case WM_CLOSE:
//Пункт[выход]--меню окна и трея,+[выход] Button(в toolbar-e)
{
UnhookWindowsHookEx(hHook);
MessageBox(0,L"Был выход через меню или кнопку",L"От Хука",0);
break;
}
case WM_COMMAND:
//Отдельно [выход]Button(в toolbar-e)
{
if(LOWORD(cwp->wParam)==57665)
{
UnhookWindowsHookEx(hHook);
MessageBox(0,L"Была нажата кнопка Выход",L"От Хука",0);
}
break;
}
case WM_SYSCOMMAND:
//Alt+F4 или "Крестик"--сворачивают окно в трей(или закрывают дочернее окно)
{
if(LOWORD(cwp->wParam==SC_CLOSE))
MessageBox(0,L"Свёрнуто в трей или закрыто дочернее окно",L"От Хука",0);
break;
}
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
Добавлено:При закрытии через системное меню пишет такой лог<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Spy++ LOG</div></div><div class="sp-body"><div class="sp-content">S WM_MENUSELECT uItem:57665 fuFlags... hmenu:...[wParam:A080E141 lParam:...]
P WM_LBUTTONDOWN...
S WM_MENUSELECT(меню закрывается)
P WM_SYSCOMAND uCmdType:E140 xPos... yPos...[wParam:0000E141 lParam:...]
P WM_CLOSE но хук этот WM_CLOSE не ловит почему то
Добавлено: у меня хук (WH_CALLWNDPROC) он вообще ловит что то системное кроме [Min] [Max] [Exit]
Я его ставлю на поток, а системное меню относится к нему?