关于利用鼠标钩子统计鼠标移动距离的问题

失落的羊 2012-03-13 04:24:14
开发环境 Winxp + bcb6.0

鼠标钩子啥的,都没有问题。

我要统计鼠标移动的像素距离,采用的是共享内存的方式。

就是在hook.dll中,根据鼠标的坐标计算移动的距离,然后写入共享内存中,在应用程序中,读取共享内存中的值,得到鼠标移动的像素距离。

但是每次得到的值好像都是乱的,忽大忽小的,求解决方案。
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的羊 2012-05-04
  • 打赏
  • 举报
回复
结贴了,问题找到了,是我自己犯的一个低级错误。
失落的羊 2012-03-19
  • 打赏
  • 举报
回复
老妖的方法我正在尝试.
Songhtao兄:MouseProc 时刻在调用,写入文件貌似不行啊。
我不懂电脑 2012-03-14
  • 打赏
  • 举报
回复
这个距离,你需要分行输入,比如放到一个文件或数据库里,这样你怎么写的,程序读出来就是什么样的。
ccrun.com 2012-03-14
  • 打赏
  • 举报
回复
应用程序中如何读取呢?定时?这样的数据是不准确的,建议你在DLL中将APP的主窗体句柄传进来,然后将鼠标的移动距离以自定义消息的方式传给主窗体并显示,这样才比较准确。
失落的羊 2012-03-13
  • 打赏
  • 举报
回复

LRESULT __stdcall MouseProc(
int code,WPARAM wParam,LPARAM lParam)
{


if (code <0){
CallNextHookEx(hNextHookProc2, code, wParam, lParam);
return 0;
}

//LPMOUSEHOOKSTRUCT lpMouseHook=(MOUSEHOOKSTRUCT *) lParam; //定义一个鼠标结构

if(wParam==WM_MOUSEMOVE && HC_ACTION==code)
{

//WaitForSingleObject(g_mutexDistance, 100);



MOUSEHOOKSTRUCT* pMHS = (MOUSEHOOKSTRUCT*)lParam;

if(g_firstTimeRecvMouseMove)
{
g_lastX = pMHS->pt.x;
g_lastY = pMHS->pt.y;
g_firstTimeRecvMouseMove = 0;
}
else
{
DWORD currX = pMHS->pt.x;
DWORD currY = pMHS->pt.y;

if(g_lastX != currX && g_lastY != currY)
{
//计算本次移动的距离
double dist = sqrt((double)(currX-g_lastX)*(currX-g_lastX) + (currY-g_lastY)*(currY-g_lastY));

if(dist > gb_Distance_Min)
{
gb_wDistance = *((UINT *)pGMem+3);
gb_wDistance = gb_wDistance+(int)dist;
*((UINT *)pGMem+3)= gb_wDistance;
g_lastX = pMHS->pt.x;
g_lastY = pMHS->pt.y;
}
}
}

//ReleaseMutex(g_mutexDistance);

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧