1

我有一个程序,当用户按下 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);
    }

谢谢阅读。

4

1 回答 1

0

您不应MessageBox()在消息挂钩中使用它,因为它会破坏正常的消息挂钩流程 - MessageBox() 运行它自己的模式循环。

如果您确实需要MessageBox,那么您应该使用PostMessage自定义消息和处理程序。在这种情况下 MessageBox 将在之后被调用CallNextHookEx(hHook, nCode, wParam, lParam);

于 2015-10-27T17:42:35.180 回答