繁体   English   中英

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

[英]Send keyboard and mouse events to DirectX application in C#?

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

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

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

有一些可能性。 您可以看一下System.Windows.Forms.SendKeys然后可以从gdi32.dll或user32.dll SetCursorPos()mouse_event调用一些Win32函数,例如SetForegroundWindow()LockSetForegroundWindow() SetCursorPos()mouse_event来执行单击:

这里是我之前使用过的Mouse事件的一个片段。

    /**
     * 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM