2

アプリケーションにキーを送信しようとしています。ブレークポイントを使用してHandlewindow値をテストして、何をしているのかを理解しましたが、解決策が見つかりません。もう少し詳しく言うと、ちょっとしたゲームで、ゲーム内でチャットバーを起動するとそこに送信したいキーが書かれているのですが、プレイ中にコマンドを使用するために機能させたいと思っています。ゲームにはガードや保護機能がありません。

これが私のコードです:

[DllImport("user32.dll")]
    static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

    const uint WM_KEYDOWN = 0x0100;

    private void button1_Click(object sender, EventArgs e)
    {
        string pName = textBox1.Text;


        //Get Processes
        Process[] processes = Process.GetProcessesByName(pName);

        //Main part
        foreach (Process p in processes)
            if (p.ProcessName == (string)pName)
            {
                    PostMessage(p.MainWindowHandle, WM_KEYDOWN, (int)Keys.W, 0);
            }


    }

私が言ったように、1000000回正常に送信できますが、何も起こりません。最小化または非表示で動作する Windows アプリケーションにキーを送信する別の方法はありますか? 私のアプリにのみ送信する必要があります。

4

4 に答える 4

1

私の理解が正しければ、あなたはゲームにキーを送信したいと考えています。この場合、ゲームは Windows メッセージ キューからキーを取得していないと思います。おそらく、DirectX または同様の方法を使用して直接キーボード ステータスを読み取っています。

この同様の質問を参照してください。

キー ストロークをゲームに送信する

于 2011-08-03T13:48:59.463 に答える
1

このようなメッセージを偽造して、それが確実に機能することを期待することはできません。あなたがしているのは、メッセージを送信することだけであり、特別なことは何もありません。

これが意味することは、ターゲット プログラムが別の方法で入力をテストする場合 (たとえば、キーの状態を直接チェックする、別のメッセージに反応する、またはまったく別のメカニズムを使用するなど)、ターゲット プログラムはせいぜい入力を完全に無視し、最悪の場合、完全に混乱します。

代わりにSendInput関数を使用してください(これが .Net フレームワークの一部として公開されているかどうかはわかりません)。

かなり関連性のあるいくつかの興味深いブログ記事:

于 2011-08-03T13:47:41.937 に答える
0

SendInputを使用して、別のウィンドウへの入力をシミュレートする必要があります。

詳細については、このブログ投稿を参照してください。

于 2011-08-03T13:48:40.440 に答える
0

KeyUp多くの場合、プログラマーはダウンではなくイベントに反応します。WM_KEYUP を送ってみましたか?

于 2011-08-03T13:46:53.760 に答える