2011-03-02 109 views
13

我想使用Win32 API模拟鼠标事件;我该怎么做?如何从代码中模拟鼠标事件?

我想要做的是模拟在最基本的水平的情况下,在该系统刚刚事件类型和坐标,并且还没有想通的窗口必须传达它的水平。

我不知道这是如何工作的。无论哪种方式,我都需要帮助。我会不得不介入司机级别?!

为了使我的要求清楚,我不想针对任何窗口,我只是想系统认为鼠标被点击或由用户移动。而且我会在C.

回答

21

进行编码您正在寻找的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),这意味着应用程序只允许注入输入到以相等的或较小的完整性级别运行的应用程序。

+0

感谢提'诚信level'给我的应用程序的管理权限解决了这个问题对我来说:) – Micka 2014-09-23 10:28:03

5

使用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); 
+3

根据[MSDN的文档(http://msdn.microsoft.com/en-us/library/ ms646260.aspx),mouse_event已被SendInput取代。他们建议使用SendInput。 – 2014-09-23 16:30:38