3

私はこのコードを持っています:

    public static void Next()
    {
        Process[] processes = Process.GetProcessesByName("test");

        foreach (Process proc in processes)
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0);
    }

このコードは右矢印キーを送信します。ALT + CTRL + RIGHTを送信したいので、これを試しました:

    public static void Forward()
    {
        Process[] processes = Process.GetProcessesByName("test");

        foreach (Process proc in processes)
        {
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_CONTROL, 0);
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_ALT, 0);
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0);
        }
    }

しかし、うまくいきません...

何か案は?

4

2 に答える 2

4

PostMessage でキーボード入力をシミュレートすることはできません。少なくとも代わりにSendInputを確実に使用することはできません。

于 2011-10-11T21:23:12.087 に答える
3

私はこれを何度も試しましたが、うまくいくかどうかはわかりません。あなたがしたいことは、「システム」タイプのキーに WM_KEYDOWN の代わりに WM_SYSKEYDOWN を使用することです。これは、WM_SYSKEYUP を使用する必要があることも意味します。このようなものがうまくいくかもしれません:

PostMessage(proc.MainWindowHandle, WM_SYSKEYDOWN, VK_CONTROL, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYDOWN, VK_ALT, 0); 
PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYUP, VK_ALT, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYUP, VK_CONTROL, 0); 

アップデート:

単一のキーのキー押下をシミュレートするためだけに使用しましたが、最小化されたアプリケーションでもうまく機能します:)。「シフト」状態の組み合わせキーとして使用する場合は、ヒットまたはミスする場所です。問題は、ほとんどの Windows アプリケーションにはコントロールがあり、各コントロールにはハンドルがあるため、ウィンドウにキーを送信しても目的の効果が得られないことです。ファイルを保存するには、[メニュー] ハンドルに ALT+S を送信する必要があります (たとえば、メモ帳)、これも機能します。

于 2011-10-11T21:21:46.430 に答える