问题描述
最初,当我只使用鼠标右键按下时,我能够打印某些内容
if (wParam == WM_RBUTTONDOWN)
但现在,我想要相同的效果,我想在按下鼠标右键+ Ctrl 键时打印出一些东西。我该如何实现?
我尝试过
LRESULT CALLBACK MainWindow::mouseProc(int Code,WParaM wParam,LParaM lParam)
{
auto& ms = *(const MsllHOOKSTRUCT*)lParam;
MsllHOOKSTRUCT* pMouseStruct = (MsllHOOKSTRUCT*)lParam;
if (pMouseStruct != nullptr)
{
if (wParam == WM_RBUTTONDOWN & MK_CONTROL) // Here,i added MK_CONTROL but it doesn't work
{
qDebug() << "Print something when Right mouse button and Ctrl button is pressed togather";
}
}
return CallNextHookEx(NULL,Code,wParam,lParam);
}
更新
当我想尝试仅按Ctrl键并应打印某些内容的情况时,它仍然不起作用
LRESULT CALLBACK MainWindow::mouseProc(int Code,LParaM lParam)
{
auto& ms = *(const MsllHOOKSTRUCT*)lParam;
MsllHOOKSTRUCT* pMouseStruct = (MsllHOOKSTRUCT*)lParam;
if (pMouseStruct != nullptr)
{
if (wParam == MK_CONTROL) // Here,i added only MK_CONTROL but it doesn't work
{
qDebug() << "Print something when Ctrl button is pressed ";
}
}
return CallNextHookEx(NULL,lParam);
}
我在这里想念什么?
解决方法
首先,如果要捕获右键+ ctrl,则可以在检测到WM_RBUTTONDOWN
时检查Ctrl键的状态(是否按下)。
LRESULT CALLBACK mouseProc(int Code,WPARAM wParam,LPARAM lParam)
{
auto& ms = *(const MSLLHOOKSTRUCT*)lParam;
MSLLHOOKSTRUCT* pMouseStruct = (MSLLHOOKSTRUCT*)lParam;
if (pMouseStruct != nullptr)
{
if (wParam == WM_RBUTTONDOWN && (GetAsyncKeyState(VK_LCONTROL)&0x8000)) //Left CONTROL key as example
{
std::cout << "ctrl + rbutton";
}
}
return CallNextHookEx(NULL,Code,wParam,lParam);
}
如果您想使用键盘钩来钩住仅“ Ctrl”:
LRESULT CALLBACK keyboardProc(int Code,LPARAM lParam)
{
KBDLLHOOKSTRUCT* pKeyboardStruct = (KBDLLHOOKSTRUCT*)lParam;
if (pKeyboardStruct != nullptr)
{
if (pKeyboardStruct->vkCode == VK_LCONTROL)
{
if(wParam == WM_KEYDOWN)
std::cout << " -ctrl- ";
}
}
return CallNextHookEx(NULL,lParam);
}
void main(void)
{
HHOOK hmouse = SetWindowsHookEx(WH_MOUSE_LL,mouseProc,hInstance,0);
HHOOK hkeyboard = SetWindowsHookEx(WH_KEYBOARD_LL,keyboardProc,0);
MSG msg;
while (GetMessage(&msg,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hmouse);
UnhookWindowsHookEx(hkeyboard);
return;
};