简体   繁体   English

SetWindowsHookEx,在按下鼠标按钮时执行代码

[英]SetWindowsHookEx, execute code while mouse button is pressed

So I made a global hotkey using SetWindowsHookEx() . 因此,我使用SetWindowsHookEx()了全局热键。 What I want it to do is while I press the right mouse button it should execute some code again and again. 我想要它做的是,当我按下鼠标右键时,它应该一次又一次地执行一些代码。 The problem is that if I press the right mouse button it only executes it once. 问题是,如果我按下鼠标右键,它只会执行一次。

This is my callback function: 这是我的回调函数:

private static IntPtr ButtonHookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {

        if (nCode >= 0)
        {
            if (wParam == (IntPtr)WM_RBUTTONDOWN)
            {
                _m.rtbLog.AppendText("Right mouse button was clicked \n");
            }

            else if (wParam == (IntPtr)WM_LBUTTONDOWN)
            {
                _m.rtbLog.AppendText("Left mouse button was clicked \n");
            }




        }

        return CallNextHookEx(MainWindow._hookId, nCode, wParam, lParam);
    }

I can't exactly judge what's your intention, but guess you need to combine the WM_RBUTTONDOWN and WM_RBUTTONUP to achieve what you want. 我无法确切判断您的意图,但是您可能需要结合WM_RBUTTONDOWNWM_RBUTTONUP来实现所需的目标。 While WM_RBUTTONDOWN , start a loop to do something, while WM_RBUTTONUP , stop doing. WM_RBUTTONDOWN ,启动循环以执行某些操作,而在WM_RBUTTONUP ,停止执行操作。

private static IntPtr ButtonHookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{

    if (nCode >= 0)
    {
        if (wParam == (IntPtr)WM_RBUTTONDOWN)
        {
            Start();
        }

        else if (wParam == (IntPtr)WM_RBUTTONUP)
        {
            Stop();
        }
    }

    return CallNextHookEx(MainWindow._hookId, nCode, wParam, lParam);
}

private static void Satrt()
{
    _toStop = false;

    while (true)
    {
        if (_toStop)
        {
            _toStop = false;
            return;
        }

        DoTask();
    }
}

private static void Stop()
{
    _toStop = true;
}

private static void DoTask()
{
    // do something
}

private static bool _toStop;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM