![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не ловится WM_COMMAND при нажатии на пункт меню [D7, WinXP]
fon-karlson © (2007-03-14 13:04:00)Доброе время суток!
Есть такой вот код:
function MessageProc(code: integer; wParam: Integer; lParam: Longint): Longint; stdcall;
var
szClassName: array[0..255] of Char;
i_cnt:integer;
MHS:TCWPStruct;
hPopupMenu:HMenu;
hPopupSubMenu:HMenu;
i,j: byte;
k: Bool;
my_mii, my_sub_mii: MENUITEMINFO;
const
ie_name = 'Internet Explorer_Server';
begin
if (Code = HC_ACTION) and (wParam=0) then begin
MHS:=PCWPStruct(lParam)^;
GetClassName(MHS.hwnd, szClassName, SizeOf(szClassName));
if (lstrcmp(@szClassName[0], @ie_name[1]) = 0) then begin
Case MHS.message of
WM_InitMenuPopup: begin
hPopupMenu:=MHS.wParam;
i_cnt:=GetMenuItemCount(hPopupMenu);
InsertMenu(hPopupMenu, i_cnt, MF_STRING or , , 'НОВАЯ ПРИБЛУДА');
end; {WM_InitMenuPopup}
WM_COMMAND: begin
ShowMessage(IntToStr(LoWord(MHS.wParam)));
end; {WM_COMMAND}
WM_UnInitMenuPopup: begin
//Some code…
end; {WM_UnInitMenuPopup}
end; {Case MHS.message}
end;
end;
Result := CallNextHookEx(SysHook1, Code, wParam, lParam);
end;
и на сообщение WM_COMMAND совершенно никакой реакции... Подскажите пожалуйста, в чём проблема?
fon-karlson (2007-03-16 14:33:00) [1]Проблема никак не хочет решаться. Такое впечатление, что при выборе пункта меню, окну IE не отсылается сообщение WM_COMMAND... По крайней мере, я немогу его "поймать".
Если кто сталкивался с такой или подобной проблемой - расскажите, как она решается?
fon-karlson (2007-03-14 18:21:00) [2]Встроенный отладчик молчит.
Хук у меня реализован в dll-ке. а из приложения он только устанавливается.
fon-karlson (2007-03-14 18:01:00) [3]Не смотрел, сейчас гляну.
Есть одна особенность: если на компе, на котором запускаю программу установлен Google ToolBar - всё работает :-/
Сергей М. (2007-03-14 17:02:00) [4]Что говорит встроенный отладчик ?
fon-karlson (2007-03-14 16:57:00) [5]Возможно, я неверно выразился, либо я неверно Вас понял, тогда прошу прощения. Но суть проблемы в том, что Я не могу "поймать" WM_COMMAND от окна (в данном случае IE) при нажатии на пункт меню. Представленная мной функция является как раз реализацией ЛОВУШКИ WH_CallWndProc. Т.е. Не ловится он этой функцией.
Сергей М. (2007-03-14 16:41:00) [6]
> Хук установлен
Раз установлен, значит ф-ция вызывается.
Все остальное - в алгоритме этой ф-ции.
fon-karlson (2007-03-14 16:29:00) [7]
> В том, очевидно, что эта твоя ф-ция никем не вызывается.
Хук установлен, при WM_InitMenuPopup пункт в меню добавляется, при WM_UnInitMenuPopup операции тоже выполняются, а вот при нажатии на любой пункт меню по идее, окну должен быть отправлен WM_COMMAND, и должен выпасть Message с ID нажатого пункта, но однако никак...
Сергей М. (2007-03-14 15:38:00) [8]
> в чём проблема?
В том, очевидно, что эта твоя ф-ция никем не вызывается.