1

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

对于持怀疑态度的人... 老师为我们学校的绘画制作了 DirectX 应用程序。我被要求制作一个在其上绘制样本的应用程序,例如火车或花之类的……我将阅读图像并使用输入来设置颜色并单击画布……

4

2 回答 2

1

有一些可能性。你可以看看,System.Windows.Forms.SendKeys你可以 pInvoke 一些 Win32 函数SetForegroundWindow(),如LockSetForegroundWindow()gdi32.dll 或 user32.dllSetCursorPos()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/

于 2011-05-11T14:29:47.270 回答
1

如果您想使用 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

于 2014-04-10T11:03:51.280 回答