在Internet Explorer_Server(IWebBrowser2)上拦截WM_COMMAND(从加速器发送)

时间:2012-10-09 22:48:00

标签: c++ internet-explorer mfc atl

我需要拦截正在发送到我的CHtmlView对象的粘贴消息。根据Spy ++,它是作为WM_COMMAND消息发送的 - 但是根据Spy ++,消息不会发送到CHtmlView对象,而是发送到它包装的Internet Explorer_Server(或IWebBrowser2)对象。在任何其他父对象中都看不到有问题的WM_COMMAND消息(我通过观察和通过Spy ++找到了这个消息)。

如何拦截此消息(甚至是全部选择)消息?我已经看过AfxCallWndProc以获取正确的WM_COMMAND消息,并且它没有显示在那里。

1 个答案:

答案 0 :(得分:1)

要拦截消息(例如: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程序首先获取控件,然后您可以决定如何处理该消息。