Перехватить WM_COMMAND (отправлено с ускорителя) в Internet Explorer_Server (IWebBrowser2)

Мне нужно перехватить сообщение Paste, которое отправляется моему объекту CHtmlView. Согласно Spy ++, оно отправляется как сообщение WM_COMMAND, но также согласно Spy ++ сообщение отправляется не объекту CHtmlView, а скорее объекту Internet Explorer_Server (или IWebBrowser2), который он оборачивает. Сообщение WM_COMMAND, о котором идет речь, не видно ни в каких других родительских объектах (я обнаружил это путем наблюдения и с помощью Spy ++).

Как мне перехватить это (или, скажем, сообщение «Выбрать все»)? Я наблюдал за AfxCallWndProc правильное сообщение WM_COMMAND, и оно там не показывается.

4

Решение

Чтобы перехватить сообщение (например, WM_COMMAND), вам нужно создать подкласс окна (в вашем случае Internet Explorer_Server), вызвав:

BOOL SetWindowSubclass(
_In_  HWND hWnd,
_In_  SUBCLASSPROC pfnSubclass,
_In_  UINT_PTR uIdSubclass,
_In_  DWORD_PTR dwRefData
);

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773183(v=vs.85).aspx#set_windowsubclass

После этого ваша собственная процедура Windows сначала берет на себя управление, и вы можете решить, что делать с сообщением.

1

Другие решения

Других решений пока нет …