2

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

好奇心旺盛な人のために、これが私が尋ねている理由です:

私は現在、Kinectを主要な入力デバイスとして使用して、ジェスチャーベースのメディアプレーヤーのデザインアイデアのデモ/モックアップに取り組んでいます。これは私が好意としてやろうと決心したことであり、プログラミングに関しては、私の時間のトンを必要とせず、それに値するものでもありません。

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

私が作成したいのは、聴衆に表示する簡単なGUIを表示する仲介です。ある時点で、ユーザーは「選択」ジェスチャを行い、オープンメディアプレーヤーで音楽の再生を開始したいと思います。そこで、メニュー階層での位置を確認し、任意に選択することを意味するキーに基づいて「音楽」を選択していることを確認してから、MediaPlayPauseキーを使用してキーイベントを生成します。

4

1 に答える 1

1

C# から行うには少し p/invoke 作業が必要ですが、複雑ではありません。FindWindow API を使用してターゲット プログラムの hWnd を取得し、次にPostMessage 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);
}
于 2011-05-28T21:39:02.143 に答える