在C#中将键盘和鼠标事件发送到DirectX应用程序?

时间:2011-05-11 14:15:57

标签: c# directx mouseevent sendkeys sendinput

我需要将全局击键和鼠标事件发送到另一个应用程序,这恰好使用DirectX。 (没有窗户本身以外的控制/手柄)
例如,我需要按住X键2秒然后释放它...
我需要在坐标x:600和y:350上按下右键单击,向下移动鼠标100像素,然后释放右键单击。
我还需要同时按下2个或更多键,如X和Y,2秒后停止X,2秒后停止Y.
所以基本上我需要完全控制输入系统......
如果我可以在最大化或在后台控制应用程序,那也是理想的选择。 (可选)

对于怀疑论者......老师为我们学校制作了一个DirectX应用程序。我被要求制作一个应用程序,在其上绘制样本,如火车或花或其他东西......我将阅读图像并使用输入设置颜色并单击画布......

2 个答案:

答案 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/