[英]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_RBUTTONDOWN
和WM_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.