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

时间:2011-03-02 07:50:49

标签: c windows winapi mouse mouseevent

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

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

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

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

2 个答案:

答案 0 :(得分:24)

您正在寻找SendInput function,它允许您合成鼠标 通过指定与输入事件对应的INPUT structures数组,在代码中单击移动和按钮。

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
);

但请注意,此函数受User Interface Privilege Isolation (UIPI)的约束,这意味着您的应用程序仅允许将输入注入到以相同或较低完整性级别运行的应用程序。

答案 1 :(得分: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);