2011-05-28 6 views
2

フォーカスを持つC#プログラムは、別の開いているアプリケーションによって処理されるキーイベントを人為的に生成できますか?私は聞いてるのよ、なぜ興味がある人のために 他のプログラムでキーイベントを人為的に生成する

が、これは次のとおりです。

私は現在、主入力としてのKinectを使用して、ジェスチャーベースのメディアプレーヤーのためのデザインのアイデアのためのデモ/モックアップに取り組んでいますデバイス。これは私が恩恵としてやることに決めたものであり、プログラミングが行われる限り、それは私の時間の大部分を必要とせず、また必要としません。

私はFAASTツールを使用してキーイベントを特定のジェスチャーに簡単にバインドすることができます。したがって、このプログラムをオンにして、どのようなジェスチャーにキーマップがあるかを教えてください。そして、ジェスチャーを行うと、キーは現在のアプリケーションによって押されて登録されます。

私が作成したいのは、視聴者に表示するシンプルなGUIを表示する中間です。特定の時点で、ユーザーは「選択」ジェスチャーを行い、開いているメディアプレーヤーで音楽を再生したいと思う。だから、私はメニュー階層でそれらの場所を確認し、選択肢を任意に選択するキーに基づいて「音楽」を選択してから、MediaPlayPauseキーでキーイベントを生成します。

+0

あなたが他のアプリケーションでのメニューと対話したい、またはメニューがあなたになります応用?他のウィンドウにイベントを送信することはかなり簡単ですが、別のアプリケーションの状態を判断することはずっと難しくなります。 – hemp

答えて

1

これは、C#から行うには少しp/invoke作業が必要ですが、複雑ではありません。あなたは、キーイベントを送信するために、その後PostMessage API、ターゲットプログラムのためのhWndを取得するためにFindWindow APIを使用します:

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32.dll", SetLastError = true)] 
private static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

private const UInt32 WM_KEYDOWN = 0x0100; 
private const UInt32 WM_KEYUP = 0x0101; 

public static void SendSelect(IntPtr HWnd) 
{ 
    PostMessage(HWnd, WM_KEYDOWN, KeyInterop.VirtualKeyFromKey(System.Windows.Input.Key.Enter), 0); 
} 
関連する問題