钩子函数获取触摸屏上单击的坐标点,然后用mouse_event模拟点击不到相应的坐标点位置。winCE平台上

magic87 2010-10-20 11:24:31
我用鼠标钩子记录触摸屏上,手动单击的点,把获取的点然后用mouse_event 模拟鼠标单击坐标点处,单击不到。两种坐标有误差,怎么回事!高手请教~~


void SaveMouseLog(char* ch)
{
CString sFileMName;

TCHAR *szFileMName = GetCurrentDir();
sFileMName.Format(L"\\mouselog.txt", szFileMName);
CFile file;
if(!file.Open(sFileMName,CFile::modeReadWrite))
{
//打开文件方式
file.Open(sFileMName,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
}
file.SeekToEnd();
file.Write(ch,strlen(ch));
file.Flush();
file.Close();
}



//鼠标回调函数
extern "C" MOUSEHOOK_API LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//鼠标结构体指针
MOUSEMSG *pMouseMsg = new MOUSEMSG;
memset(pMouseMsg,0,sizeof(pMouseMsg));
PEVENTMSGMSG pMsg = (PEVENTMSGMSG)lParam;


//定义一个存放itoa的buffer
char buffer[1024]= {0};

//记录鼠标的单击和双击的点
if( pMsg )
{
pMouseMsg->pt.x = LOWORD(pMsg->paramL);
pMouseMsg->pt.y = HIWORD(pMsg->paramL);

//屏幕坐标和客户坐标转换
ClientToScreen(HWND_DESKTOP,&(pMouseMsg->pt));

//每行写一个坐标,方便读取!回放
switch( pMsg->message)
{
case WM_LBUTTONDOWN :
{
SaveMouseLog("click ");
SaveMouseLog(_itoa(pMouseMsg->pt.x,buffer,10));
SaveMouseLog(" ");
SaveMouseLog(_itoa(pMouseMsg->pt.y,buffer,10));
//换行
SaveMouseLog("\n");
break;
}

default:break;
}

//释放指针
delete(pMouseMsg);
}

return CallNextHookEx( hMouseHook, nCode, wParam, lParam );
}




模拟单击mouse_event
x = atoi(TmpXstr);
y = atoi(TmpYstr);

//鼠标模拟操作单击点(x,y)处
SetCursorPos(x,y);//设置坐标的位置
//鼠标左键单击
mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);//鼠标down事件
mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);//鼠标up事件
...全文
288 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
沙鹰 2010-10-20
  • 打赏
  • 举报
回复
做过Win7下类似的东西建议,1.检查屏幕与客户区坐标转换有没有问题。2.就是先校正一下,确保触摸屏的精度问题,之前做的研发阶段的触摸屏部分区域就偏差了两三毫米
magic87 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jacky_qiu 的回复:]
确实有误差,我也遇到类似的情况,后来没怎么理会了
[/Quote]

额,不理会怎么办,要交差啊!
jacky_qiu 2010-10-20
  • 打赏
  • 举报
回复
确实有误差,我也遇到类似的情况,后来没怎么理会了
magic87 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 small_hunter 的回复:]
做过Win7下类似的东西建议,1.检查屏幕与客户区坐标转换有没有问题。2.就是先校正一下,确保触摸屏的精度问题,之前做的研发阶段的触摸屏部分区域就偏差了两三毫米
[/Quote]

Small_hunter哥们能详细点么,我的钩子是全局dll的!获得的坐标,不知道是屏幕的还是客户的!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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