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

时间:2017-10-15 14:27:14

标签: c# wpf button callback mouse

所以我使用SetWindowsHookEx()创建了一个全局热键。我想要它做的是当我按下鼠标右键时,它应该一次又一次地执行一些代码。问题是,如果我按下鼠标右键,它只执行一次。

这是我的回调函数:

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);
    }

1 个答案:

答案 0 :(得分:-1)

我无法准确判断您的意图是什么,但您猜测需要将WM_RBUTTONDOWNWM_RBUTTONUP结合起来以实现您的目标。在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;
相关问题