大家好我现在需要录制用户的一段鼠标点击事件,需要记录左键按下,左键抬起,右键按下,右键抬起,还有两次点击的时间差等等一系列数据。然后回放模拟。一开始我使用MFC的windows消息处理机制来实现的。发现重大的问题是只对该MFC的点击有效,如果出了MFC的窗口区域点击就无法记录了。第二次我hook了鼠标点击消息用的是WH_MOUSE_LL,然后再wParam里面switch选择左右键按下抬起四种情况。把hook做成dll,全局钩子,三个函数sethook,unhook,foozing做主程序和dll的接口,没有什么参数的传递。但是对于鼠标的点击事件记录的非常不完整。我想既然是全局的钩子应该会对每一次的点击都有处理和记录(记录是我自己的鼠标钩子回调函数里面的功能),但是非常不完整。希望大家可以帮我想想,如果需要的话可以贴上代码。对于鼠标的模拟点击,我用的是mouse_event函数,应该没有什么问题。WH_MOUSE_LL里面的lParam包含的point是绝对于全屏幕的还是相对于客户区的?谢谢大家了。最近发帖比较多,有些还没有彻底弄懂,等过了这一阵子一块儿结贴。
解决方案 »
- VC实现车牌识别系统
- 请教各位 如何实现返回值一个SAFEARRAY数组的组件方法啊
- 请问一个OnReceive()的问题
- 谁能告诉我怎么样使用CJlibary?
- 我做一个小程序,实现定时提醒功能,旦觉得方法比较笨!大家有什么好方法可以提供?
- 在MFC对话框中动态装入ATL复合控件,为什么一点击控件上的按钮程序就死掉?
- 一个让我头疼的问题,关于图像实时处理的问题,数据不要存入硬盘....... 关注就给分!!!
- 谁能帮忙具体说明一下IServerXMLHTTPReques
- 我faint!!!
- Visual Studio 6.0 Service Pack 4在什么地方可以下载,有多大?
- 有没有办法得到窗口句柄就可以美化窗口呢
- 主线程和子线程的数据访问冲突问题。
#include <stdio.h>#include <windows.h>
HHOOK g_ms_hook = 0;
HHOOK g_kb_hook = 0;
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
{
printf((w==WM_KEYDOWN)?"按下%c\n":"抬起%c\n",((PKBDLLHOOKSTRUCT)l)->vkCode);
return CallNextHookEx (g_kb_hook, code, w, l);
}
LRESULT CALLBACK ms_proc (int code, WPARAM w, LPARAM l)
{
if(w == WM_LBUTTONDOWN)
printf("按下左键\t");
else if(w == WM_LBUTTONUP)
printf("抬起左键\t");
else if(w == WM_RBUTTONDOWN)
printf("按下右键\t");
else if(w == WM_RBUTTONUP)
printf("抬起右键\t");
else if(w == WM_MOUSEMOVE)
printf("鼠标移动\t");
else
printf("未知按键\t"); printf("x:%d\ty:%d\n",((PMSLLHOOKSTRUCT)l)->pt.x,((PMSLLHOOKSTRUCT)l)->pt.y); return CallNextHookEx (g_ms_hook, code, w, l);
}
int main (void)
{
g_kb_hook = SetWindowsHookEx (WH_KEYBOARD_LL,kb_proc,GetModuleHandle (NULL),0);
g_ms_hook = SetWindowsHookEx (WH_MOUSE_LL, ms_proc,GetModuleHandle(NULL),0); if (g_kb_hook == NULL || g_ms_hook == NULL)
{
printf("安装钩子出错\n");
return 0;
};
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};
UnhookWindowsHookEx (g_kb_hook);
return 0;
};
首先非常感谢。话说这是你当场写的?厉害!CSDN真是牛人大本营只有一个问题哈,'WH_MOUSE_LL' : undeclared identifier 怎么处理?