7

我们如何在不移动鼠标的情况下在某个位置制作鼠标点击事件(我的意思是让计算机认为一个位置是用鼠标点击的)用 C++

4

2 回答 2

6

Windows API 中的SendInput函数将帮助您入门。请查看以下链接以了解该方法的定义、其输入参数和返回值: http:
//msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85)。 aspx

您可以点击页面中的链接以了解有关函数中使用的结构和数据类型的更多信息。

更新:你可以从这样的事情开始

#include<Windows.h>
int main()
{
    INPUT input;
    input.type=INPUT_MOUSE;
    input.mi.dx=0;
    input.mi.dy=0;
    input.mi.dwFlags=(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE|MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP);
    input.mi.mouseData=0;
    input.mi.dwExtraInfo=NULL;
    input.mi.time=0;
    SendInput(1,&input,sizeof(INPUT));
    return 0;
}

这将自动将您的鼠标移动到屏幕的左上角并单击鼠标右键。现在,如果您想在不移动鼠标的情况下单击屏幕上的某个位置,我认为使用 SendInput() 是不可能的。您无需担心移动鼠标,因为您的程序会自行完成。这就是“MOUSEEVENTF_MOVE”标志告诉程序要做的事情。如果您不使用该标志,则单击将发生在鼠标的当前位置。

于 2012-09-11T05:42:00.803 回答
3

您可以使用SendInput() 函数来模拟鼠标点击和键盘敲击:

SendInput 函数将 INPUT 结构中的事件串行插入到键盘或鼠标输入流中。这些事件不会与由用户(使用键盘或鼠标)或通过调用 keybd_event、mouse_event 或对 SendInput 的其他调用插入的其他键盘或鼠标输入事件相互穿插。

您还可以使用SendMessage()PostMessage()发送按钮按下消息,例如

SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(mousePosX, mousePosY));

,但可靠性较低。请注意,通过这种方式,您可能还需要WM_LBUTTONUP稍后发送,具体取决于您在应用程序中处理事件的方式。

还要检查这个问题,接受的答案非常详细。

于 2012-09-11T05:43:24.697 回答