我如何使用Win32钩子模拟Alt+Tab
How can I simulate an Alt+Tab using Win32 hooks?
我使用VS2010编写了这个c++程序,以检测用户何时双击鼠标中键单击,切换到下一个窗口(如Alt+Tab所做的)并停止钩子链。下面是我的代码:
DLL:
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;
}
EXE:
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);
我启动程序并设置钩子,然后程序挂起,鼠标在大多数应用程序中停止工作(尽管在Chrome中保持工作)。我做错了什么?
钩子是邪恶的,如果它们不被用作通知。MSDN强烈建议调用CallNextHookEx()
是有原因的。您无法知道您处于调用链的哪一点。这使得你的代码很脆弱,即使它一开始看起来可以工作。
你依赖于钩子API的其他用户对你友好,即调用你。如果有人(比如你)不这样做,你的代码就会崩溃。
在不深入讨论代码中断的细节的情况下,我认为
鼠标在大多数应用程序中停止工作
如果您通过返回TRUE
来关闭鼠标钩子的其他用户,是吗?
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 如何使用键盘的特殊键,如Command、Shift、Alt、Tab或C/C++程序中的功能键
- TeamViewer 如何以编程方式在 Windows 上模拟 Ctrl-Alt-Del?
- WS_EX_TOOLWINDOW in alt-tab
- Alt Tab 覆盖 Win32 标识器
- 如何更改的图标:任务栏,在左上角,当按下Alt Tab键时的图标,我的.exe
- 带Alt+Tab键的WH_KEYBOARD停止工作
- 我如何使用Win32钩子模拟Alt+Tab
- 带有Arduino的Alt-Tab踏板
- C++ Alt-Tab Hook
- 使用发送输入激活窗口"Alt Tab"切换器
- 如何检测用户是否按下了Ctrl-Alt-Del或Alt-Tab,以便我可以最小化我的程序
- 模拟在C++中按下ALT+F4键
- 以编程方式模拟 Alt + Enter 按键不起作用
- Pressing Win+X, Alt-Tab programmatically