1

グローバルキーストロークとマウスイベントを別のアプリケーションに送信する必要があります。これは、DirectXを使用して偶然に使用されています。(ウィンドウ自体以外のコントロール/ハンドルはありません)
たとえば、キーXを2秒間押し続けてから放す
必要があります...座標x:600およびy:350を右クリックして、マウスを動かす必要があります100ピクセル下に移動してから、右クリックを放します。
また、XとYのように一度に2つ以上のキーを押し、2秒後にXを停止し、さらに2秒後にYを停止する必要があります。
したがって、基本的には入力システムを完全に制御する必要があります...
最大化またはバックグラウンドでアプリケーションを制御できれば理想的です。(オプション)

懐疑論者のために...先生は私たちの学校のために描くためのDirectXアプリケーションを作成しました。電車や花などのサンプルを描画するアプリケーションを作成するように求められます...画像を読み取り、入力を使用して色を設定し、キャンバスをクリックします...

4

2 に答える 2

1

いくつかの可能性があります。gdi32.dll または user32.dll からのようなSystem.Windows.Forms.SendKeysいくつかの Win32 関数を pInvokeして、クリックを実行することができます。SetForegroundWindow()LockSetForegroundWindow()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/です

于 2011-05-11T14:29:47.270 に答える