- 论坛徽章:
- 0
|
我在编写一个返回鼠标点击次数的钩子函数,遇到了一个奇怪的问题,我是在主程序中每分钟调用一次全局的鼠标钩子,但是发现如果在动态库的函数中加上断点,则每次运行都是正常的,但是如果不加断点,则返回的鼠标点击次数有时候正确,有时候为0,请问高手有人知道问题在哪里吗?
代码如下:
主程序:
。。。
hwUsage_data.lMouseClick = (RecentTimes*hwUsage_data.lMouseClick+MonitorHooksGetMouseClicks())/(RecentTimes+1);
hwUsage_data.lKeyboardActive = (RecentTimes*hwUsage_data.lKeyboardActive+MonitorHooksGetKeyboardKeys())/(RecentTimes+1);
。。。
全局钩子动态库:
。。。
__declspec(dllexport) LONG MonitorHooksGetMouseClicks()
{
lMouseClicks = g_MouseClicks;
g_MouseClicks = 0;
return lMouseClicks;
}
LRESULT CALLBACK MouseTracker(int code, WPARAM wParam, LPARAM lParam)
{
if (code>=HC_ACTION)
{
if (wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN || wParam == WM_LBUTTONDBLCLK || wParam == WM_RBUTTONDBLCLK)
{
g_MouseClicks++;
}
MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lParam;
if (pStruct->pt.x != g_mouseLocX || pStruct->pt.y != g_mouseLocY)
{
g_mouseLocX = pStruct->pt.x;
g_mouseLocY = pStruct->pt.y;
g_MouseMoves = TRUE;
}
}
return ::CallNextHookEx(g_hHkMouse, code, wParam, lParam);
}
__declspec(dllexport) BOOL MonitorHooksInit()
{
if (g_hHkMouse == NULL) {
g_hHkMouse = SetWindowsHookEx(WH_MOUSE, MouseTracker, g_hInstance, 0);
}
//_ASSERT(g_hHkKeyboard);
//_ASSERT(g_hHkMouse);
if (!g_hHkKeyboard || !g_hHkMouse)
return FALSE;
else
return TRUE;
}
。。。
谢谢了 |
|