按住鼠标左键时,我需要在鼠标钩中重复我的功能。但是使用我当前的代码,它只被调用一次。我假设当我按住鼠标左键时,代码会一遍又一遍地被调用,我不确定这是否真的有效,我想尝试一下。我需要代码在钩子中运行以用于计时目的。
LRESULT __stdcall hk_mouse( int nCode, WPARAM wParam, LPARAM lParam )
{
if (nCode >= 0)
{
switch (wParam) {
case WM_LBUTTONDOWN:
{
Beep( 1000, 100 );
break;
}
case WM_LBUTTONUP:
{
break;
}
default:
{
break;
}
}
}
return CallNextHookEx( mouse_hook, nCode, wParam, lParam );
}
鼠标按钮消息不会在Windows中重复。
当你收到WM_LBUTTONDOWN
时,你应该使用你需要的重复延迟create a timer,然后在你的钩子proc中处理WM_TIMER
消息,并查找你在创建计时器时指定的计时器ID。
当鼠标按钮被释放,你收到WM_LBUTTONUP
,你应该delete the timer。
您应该注意,为响应WM_TIMER
消息而执行的任何代码也应该在WM_LBUTTONDOWN
事件中执行(除非您在第一次按下按钮时需要延迟),因此最好将该代码放在可以执行的函数中然后从两个地方打电话。