gpt4 book ai didi

c++ - 如何使用 Win32 Hook 模拟 Alt+Tab?

转载 作者:可可西里 更新时间:2023-11-01 14:15:09 25 4
gpt4 key购买 nike

我使用 VS2010 编写了这个 C++ 程序来检测用户何时双击鼠标中键、切换到下一个窗口(如 Alt+Tab 所做的那样)并停止 Hook 链。这是我的代码:

动态链接库:

extern "C"__declspec (dllexport)
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode<0)
return CallNextHookEx(NULL,nCode,wParam,lParam);

if (wParam == WM_MBUTTONDBLCLK)
{
PostMessage(GetActiveWindow(),WM_SYSCOMMAND,SC_NEXTWINDOW,0);
}
else
return CallNextHookEx(NULL,nCode,wParam,lParam);
// if EVERYTHING_IS_OK
return TRUE;
}

执行文件:

do{
nMenu = choose();
switch (nMenu)
{
case 1:
hLib = LoadLibrary(cLibName);
hProc = (HOOKPROC) GetProcAddress(hLib, "HookProc");
hHook = SetWindowsHookEx(WH_MOUSE, hProc, hLib, NULL);
break;
case 2:
UnhookWindowsHookEx(hHook);
break;
case 0:
;
}
} while (nMenu);

我启动程序并设置 Hook ,然后程序挂起并且鼠标在大多数应用程序中停止工作(尽管在 Chrome 中继续工作)。我做错了什么?

最佳答案

如果钩子(Hook)不仅仅用作通知,那么钩子(Hook)就是邪恶的。出于某种原因,MSDN 强烈建议调用 CallNextHookEx()。您无法知道您在调用链中的哪一点。这会使您的代码变得脆弱,即使它一开始看起来可以工作。

您依赖 Hook API 的其他用户对您友善,即给您打电话。如果有人(比如您)不这样做,您的代码就会出错。

如果不进一步详细说明您的代码在哪里中断,我认为这并不奇怪

the mouse stops working in most apps

如果您通过返回 TRUE 关闭鼠标 Hook 的其他用户,是吗?

关于c++ - 如何使用 Win32 Hook 模拟 Alt+Tab?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com