LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL bKeyUp = lParam & (1 << 31);
int x=0;
int y=0;
if (bKeyUp && wParam == VK_LEFT && nCode == HC_ACTION)
{
x=38;
y=444;
}
else if(bKeyUp && wParam == VK_RIGHT && nCode == HC_ACTION)
{
x=68;
y=444;
}
else
{
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}
if (pCWndWGMain == NULL)
{
//更改当前有效模块状态到DLL中 以便正确的读取对话框的资源
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//找到当前的有效激活窗口
CWnd *pCWnd = CWnd::GetForegroundWindow();
char buf[MAX_PATH];
::GetClassName(pCWnd->GetSafeHwnd(), buf, MAX_PATH);
if (lstrcmpi(buf, "Tencent_Traveler_Main_Window") == 0)
{
::SetCursorPos(x,y);
::mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
::mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
else
{
//根据当前呼出窗口的状态来显示或隐藏呼出窗口
pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}
本文展示了一个使用键盘钩子(keyboard hook)实现特定按键响应功能的C++代码示例。当按下左箭头键时,程序会在指定坐标(38, 444)模拟鼠标点击;按下右箭头键时,则在坐标(68, 444)模拟点击。该示例适用于特定的应用程序窗口,并展示了如何通过键盘事件触发鼠标操作。
930

被折叠的 条评论
为什么被折叠?



