关于SendMessage(WM_RBUTTONDOWN.)跟mouse_event(MOUSEEVENTF_RIGHTDOWN.)的疑问,求大神!
关于SendMessage(WM_RBUTTONDOWN...)和mouse_event(MOUSEEVENTF_RIGHTDOWN...)的疑问,求大神!!!
如题,我写了个小程序,程序会启动一个线程,然后在指定的其他窗口上触发鼠标以及键盘信息。
例如我在记事本上触发鼠标和键盘信息,按道理当我触发了一个右键按下+右键抬起之后,应该弹出记事本的右键菜单。
而实际上我使用mouse_event是可以出来这个右键菜单的,而使用SendMessage的话则不会,可以发现焦点似乎不在记事本的编辑框内,不知道这是为什么??
下面是具体的代码:
------解决方案--------------------
mouse_event不是发消息而是模拟硬件事件
调用右键菜单不是两个鼠标消息搞定的
------解决方案--------------------
PostMessage第一个参数要用二楼所说的方法FindWindow到的窗口句柄
如题,我写了个小程序,程序会启动一个线程,然后在指定的其他窗口上触发鼠标以及键盘信息。
例如我在记事本上触发鼠标和键盘信息,按道理当我触发了一个右键按下+右键抬起之后,应该弹出记事本的右键菜单。
而实际上我使用mouse_event是可以出来这个右键菜单的,而使用SendMessage的话则不会,可以发现焦点似乎不在记事本的编辑框内,不知道这是为什么??
下面是具体的代码:
CWnd::FromHandle(hWnd)->ShowWindow(SW_NORMAL);
CWnd::FromHandle(hWnd)->SetForegroundWindow();
SetCursorPos(ptPointA.x, ptPointA.y);
strLogs.Format("移动鼠标到点A!");
WriteLog(strLogs, 1);
// 鼠标右击
// 使用SendMessage的话可以看到编辑框内鼠标在闪,我想是因为上面的SetCursorPos的缘故
// 但是似乎由于SetCursorPos把焦点定到编辑框后,下面的SendMessage马上又把焦点拉出去了,这是为什么呢?
//::SendMessage(hWnd, WM_RBUTTONDOWN, NULL, NULL);
//::SendMessage(hWnd, WM_RBUTTONUP, NULL, NULL);
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);//点下右键
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);//松开右键
strLogs.Format("鼠标右击!");
WriteLog(strLogs, 1);
Sleep(10);
SetCursorPos(ptPointB.x, ptPointB.y);
strLogs.Format("移动鼠标到点B");
WriteLog(strLogs, 1);
Sleep(10);
// 鼠标左击
//::SendMessage(hWnd, WM_LBUTTONDOWN, NULL, NULL);
//::SendMessage(hWnd, WM_LBUTTONUP, NULL, NULL);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//点下左键
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//松开左键
strLogs.Format("鼠标左击");
WriteLog(strLogs, 1);
Sleep(10);
// 空格
//::SendMessage(hWnd, WM_KEYDOWN, VK_SPACE, NULL);
keybd_event(VK_SPACE, 0, 0, 0);
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
strLogs.Format("按下空格");
WriteLog(strLogs, 1);
Sleep(1000);
strLogs.Format("继续循环!");
WriteLog(strLogs, 1);
strLogs.Format("=======================================");
WriteLog(strLogs, 1);
------解决方案--------------------
mouse_event不是发消息而是模拟硬件事件
调用右键菜单不是两个鼠标消息搞定的
------解决方案--------------------
PostMessage第一个参数要用二楼所说的方法FindWindow到的窗口句柄