钩子函数获取触摸屏上单击的坐标点,然后用mouse_event模拟点击不到相应的坐标点位置。winCE平台上
我用鼠标钩子记录触摸屏上,手动单击的点,把获取的点然后用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事件