Google chrome 使用Chromium嵌入式框架覆盖鼠标
在文件Google chrome 使用Chromium嵌入式框架覆盖鼠标,google-chrome,winapi,mouse,chromium-embedded,Google Chrome,Winapi,Mouse,Chromium Embedded,在文件cefclient\u win.cpp LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 鼠标消息被过滤掉了,因为我只通过WM_MOUSEMOVE消息 似乎鼠标左键或右键单击都是在鼠标抓住它们之前完成的。特别是如何禁用鼠标右键单击?问题是CEF创建了一个子窗口,并且没有将鼠标事件传递给父窗口。我通过安装低级鼠标挂钩克服了它 ///////////////// // Low-lev
cefclient\u win.cpp
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
鼠标消息被过滤掉了,因为我只通过WM_MOUSEMOVE消息
似乎鼠标左键或右键单击都是在鼠标抓住它们之前完成的。特别是如何禁用鼠标右键单击?问题是CEF创建了一个子窗口,并且没有将鼠标事件传递给父窗口。我通过安装低级鼠标挂钩克服了它
/////////////////
// Low-level mouse hook:
//
LRESULT CALLBACK MyMouseHookLL(int nCode, WPARAM wp, LPARAM lp)
{
MSLLHOOKSTRUCT *pmh = (MSLLHOOKSTRUCT *) lp;
if (nCode==HC_ACTION) {
if( wp == WM_RBUTTONDOWN || wp == WM_RBUTTONUP ) {
//gooble it
return 1;
}
}
return CallNextHookEx(g_hHookMouseLL, nCode, wp, lp);
}
g_hHookMouseLL = SetWindowsHookEx(WH_MOUSE_LL, MyMouseHookLL, hInst, 0);
我解决这个问题的方法是在CEF为每个浏览器窗口创建的线程中添加一个鼠标挂钩:
// 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);
}
//钩子以禁用鼠标右键单击
LRESULT回调MyMouseHook(int-nCode、WPARAM-wp、LPARAM-lp)
{
MOUSEHOOKSTRUCT*pmh=(MOUSEHOOKSTRUCT*)lp;
如果(nCode>=0){
如果(wp==WM|RBUTTONDOWN | wp==WM|RBUTTONUP){
返回1;
}
}
返回CallNextHookEx(NULL、nCode、wp、lp);
}
无效的
CefBrowserApplication::OnCreate(
CefRefPtr aBrowserClient)
{
//钩住老鼠
DWORD threadId=GetWindowThreadProcessId(aBrowserClient->GetBrowser()->GetWindowHandle(),NULL);
HHOOK hook=SetWindowsHookEx(WH_MOUSE,MyMouseHook,NULL,threadId);
}
请注意,我没有使用低级鼠标挂钩,因为它们是整个桌面的全局鼠标挂钩。在全局低级钩子中禁用鼠标右键单击会使所有正在运行的应用程序都禁用鼠标右键单击。您是否也可以用c#来解释这一点?