所以我使用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);
}
答案 0 :(得分:-1)
我无法准确判断您的意图是什么,但您猜测需要将WM_RBUTTONDOWN
和WM_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;