使用Chromium嵌入式框架覆盖鼠标 [英] Override mouse using Chromium embedded framework

查看:158
本文介绍了使用Chromium嵌入式框架覆盖鼠标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文件 cefclient_win.cpp中有可能是

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

鼠标消息被过滤掉,因为我只收到WM_MOUSEMOVE消息?

mouse messages are filtered out, as I only get WM_MOUSEMOVE message through?

好像左键或右键在 WndProc 掌握了它们。我如何禁用鼠标右键单击特别是?

It seems like left or right clicks are handled before the WndProc gets a hold of them. How do I disable right mouse click in particular?

推荐答案

我解决它的方法是通过向创建的线程添加鼠标钩子通过CEF为每个浏览器窗口添加:

The way I solved it was by adding a mouse hook to the thread created by CEF for each browser window:

// Hook to disable right mouse clicks
LRESULT CALLBACK MyMouseHook(int nCode, WPARAM wp, LPARAM lp)
{
    MOUSEHOOKSTRUCT *pmh = (MOUSEHOOKSTRUCT *) lp;

    if (nCode >= 0) {
        if( wp == WM_RBUTTONDOWN || wp == WM_RBUTTONUP ) {
            return 1;
        }
    }
    return CallNextHookEx(NULL, nCode, wp, lp);   
}

void 
CefBrowserApplication::OnCreate( 
    CefRefPtr<CefBrowserClientHandler> aBrowserClient)
{
    // Hook the mouse
    DWORD threadId = GetWindowThreadProcessId(aBrowserClient->GetBrowser()->GetWindowHandle(), NULL);
    HHOOK hook = SetWindowsHookEx(WH_MOUSE, MyMouseHook, NULL, threadId);
}

请注意,我没有使用低级别的鼠标钩子,因为这些钩子全局为整个桌面。在全局低级别钩子中禁用鼠标右键单击将禁用所有正在运行的应用程序。

Note that I'm not using a low level mouse hook, since those are global for the entire desktop. Disabling right mouse clicks in a global low level hook would disable it for all running applications.

这篇关于使用Chromium嵌入式框架覆盖鼠标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆