在Internet Explorer_Server(IE9)中处理窗口消息

Processing windows messages in Internet Explorer_Server (IE9)

本文关键字:处理 窗口 消息 IE9 Internet Explorer Server      更新时间:2023-10-16

我正在使用Firebreath开发一个无窗口插件,我想捕获一个特定的消息进行进一步处理,我可以这样做,但我认为其余的消息都"丢失"了。

我有这个代码来挂接消息循环:

bool myPlugin::onWindowAttached(FB::AttachedEvent *evt, FB::PluginWindow* pluginwin)
{
    FB::PluginWindowlessWin* win = dynamic_cast<FB::PluginWindowlessWin*>(pluginwin);
    FBLOG_INFO("", win->getHWND()); //getHWND returns the HWND of the Internet Explorer_Server window (get by using Spy++)
    SubclassWindow(win->getHWND(), (WNDPROC)&myPlugin::WndProc);
    return true;
}

这就是处理功能:

LRESULT CALLBACK myPlugin::WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg) {
        case (WM_ERASEBKGND):           
            return 1;     
    }   
    return DefWindowProc(hWindow, msg, wParam, lParam);
}

这在IE9上可以正常工作(我这样做是因为我在重新绘制图像时遇到了一些问题),但点击消息和任何其他消息都没有得到处理;因此,如果一个按钮和我的插件在同一个页面上,它将无法点击。

我将IE9作为一个单独的进程运行。

感谢您的帮助。

谢谢!

您没有调用上一个HWND的wndproc。普遍调用DefWindowProc()是不正确的。当您对HWND进行子类化时,您需要获取旧wndproc的地址,并将不处理的消息传递给它,而不是DefWindowProc()。

我不知道该怎么做。