簡體   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