如何从代码中模拟鼠标事件?

Dha*_*rma 17 c windows mouse winapi mouseevent

我想使用Win32 API模拟鼠标事件; 我该怎么做?

我想要做的是在最基本的级别模拟事件,系统只有事件类型和坐标的级别,还没有确定它必须转发到哪个窗口.

我不知道这是怎么回事.无论哪种方式,我都需要帮助.我是否必须干涉司机级别?!

为了明确我的要求,我不希望任何窗口,我只是希望系统认为鼠标被用户点击或移动.我会用C编码.

Cod*_*ray 24

您正在寻找该SendInput功能,它允许您通过指定与输入事件对应的INPUT结构数组来合成代码中的鼠标移动和按钮单击.

UINT WINAPI SendInput(
  __in  UINT nInputs,     // number of structures in the pInputs array
  __in  LPINPUT pInputs,  // an array of INPUT structures, representing an event
  __in  int cbSize        // the size, in bytes, of an INPUT structure
);
Run Code Online (Sandbox Code Playgroud)

但请注意,此功能受用户界面权限隔离(UIPI)的约束,这意味着您的应用程序仅允许将输入注入到以相同或较低完整性级别运行的应用程序.

  • 感谢您提到赋予我的应用程序管理员权限的“完整性级别”为我解决了这个问题:) (2认同)

Chr*_*ris 6

使用mouse_event(winuser.h).以下代码将移动鼠标,然后在新位置执行单击.您可以在两行中执行此操作,但这更详细.

请注意,X和Y在mickeys中指定,0到65535.然后将其映射到当前分辨率,即0,0将是左上角,65535,65535将是右下角.

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

  • 根据[MSDN的文档](http://msdn.microsoft.com/en-us/library/ms646260.aspx),mouse_event已被SendInput取代.他们建议使用SendInput. (4认同)