У меня есть процедура, когда пользователь нажимает кнопку Ctrl и щелкает правой кнопкой мыши, на экране появляется окно сообщения. Но у него есть цикл, я только один раз нажимаю кнопку Ctrl и щелкаю правой кнопкой мыши, но он показывает последовательность сообщений. Как это исправить?
https://youtu.be/LzI9M_zEEKQ
Это моя процедура MouseProc
#define EXPORT __declspec(dllexport)
unsigned char KeyState[256];
LRESULT EXPORT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(hHook, nCode, wParam, lParam);
GetKeyboardState(KeyState);
if (nCode == HC_ACTION)
{
if ((wParam == WM_RBUTTONUP) && (KeyState[VK_CONTROL] & 0x80))
{
MessageBox(NULL, L"Ctrl + Right Click", L"Mouse hook", MB_OK);
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
Спасибо за прочтение.
Вы не должны использовать MessageBox()
в перехватах сообщений, поскольку это нарушает нормальный поток перехвата сообщений — MessageBox () запускает собственный модальный цикл.
Если вам нужно именно MessageBox
тогда вы должны использовать PostMessage
с пользовательским сообщением и обработчиком. В этом случае MessageBox будет вызван после CallNextHookEx(hHook, nCode, wParam, lParam);
Других решений пока нет …