我需要将全局击键和鼠标事件发送到另一个应用程序,这恰好使用DirectX。 (没有窗户本身以外的控制/手柄)
例如,我需要按住X键2秒然后释放它...
我需要在坐标x:600和y:350上按下右键单击,向下移动鼠标100像素,然后释放右键单击。
我还需要同时按下2个或更多键,如X和Y,2秒后停止X,2秒后停止Y.
所以基本上我需要完全控制输入系统......
如果我可以在最大化或在后台控制应用程序,那也是理想的选择。 (可选)
对于怀疑论者......老师为我们学校制作了一个DirectX应用程序。我被要求制作一个应用程序,在其上绘制样本,如火车或花或其他东西......我将阅读图像并使用输入设置颜色并单击画布......
答案 0 :(得分:2)
如果您想使用C#库来简化您的工作,请阅读以下链接 -
http://www.codeproject.com/Articles/117657/InputManager-library-Track-user-input-and-simulate
除了.Net C#,你可以使用其他语言替代,比如在Java中,没有直接x或正常输入的混淆 -
http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
答案 1 :(得分:1)
有一些可能性。您可以查看System.Windows.Forms.SendKeys
,然后您可以从gdi32.dll或user32.dll SetForegroundWindow()
和LockSetForegroundWindow()
中调用一些Win32函数,例如SetCursorPos()
,mouse_event
执行点击:
这是我之前使用的鼠标事件的片段。
/**
* Mouse functions
*/
[DllImport("user32.dll", ExactSpelling=true)]
public static extern long mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 cButtons, Int32 dwExtraInfo);
[DllImport("user32.dll", ExactSpelling=true)]
public static extern void SetCursorPos(Int32 x, Int32 y);
public const Int32 MOUSEEVENTF_ABSOLUTE = 0x8000;
public const Int32 MOUSEEVENTF_LEFTDOWN = 0x0002;
public const Int32 MOUSEEVENTF_LEFTUP = 0x0004;
public const Int32 MOUSEEVENTF_MIDDLEDOWN = 0x0020;
public const Int32 MOUSEEVENTF_MIDDLEUP = 0x0040;
public const Int32 MOUSEEVENTF_MOVE = 0x0001;
public const Int32 MOUSEEVENTF_RIGHTDOWN = 0x0008;
public const Int32 MOUSEEVENTF_RIGHTUP = 0x0010;
public static void PerformLeftKlick(Int32 x, Int32 y)
{
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
希望能把你推向正确的方向。一个好的资源是http://pinvoke.net/