1

私はこのコードを使用しています

    const int WM_KEYDOWN = 256;
    const int WM_KEYUP = 257;
    const int WM_CHAR = 258;

    public static void SendKeys(string message){
        int foregroundWindowHandle = GetForegroundWindow();
        uint remoteThreadId = GetWindowThreadProcessId(foregroundWindowHandle, 0);
        uint currentThreadId = GetCurrentThreadId();

        //AttachTrheadInput is needed so we can get the handle of a focused window in another app
        AttachThreadInput(remoteThreadId, currentThreadId, true);
        //Get the handle of a focused window
        int focused = GetFocus();
        //Now detach since we got the focused handle
        AttachThreadInput(remoteThreadId, currentThreadId, false);
        foreach (char c in message)
        {
            //SendMessage(focused, WM_CHAR, (int)c, null);
            SendMessage(focused, WM_KEYDOWN, 65, null);
            SendMessage(focused, WM_KEYUP, 66, null);
            SendMessage(focused, WM_CHAR, 67, null);
        }
    }

そして、テストすると(たとえば、メモ帳がアクティブになっている場合)、文字Cのみが印刷されるため、WM_CHARのみが機能します-なぜですか?

4

1 に答える 1

-1

まず、キーボードメッセージの送信方法を尋ねる質問が非常に頻繁に行われることを理解してください。私はあなたが以前の答えを探すのに多くの時間を費やしていないと思います。次に、初心者はキーボードメッセージの送信が最も簡単で効果的な解決策であると誤解することがよくあることを理解してください。真実は、それが通常最も簡単ではなく、最も効果的でなく、最も信頼できるものでもないということです。

このようなWindowsメッセージを使用する場合は、Spy++の使用方法を学習してください。それが何であるかわからない場合は、VSツールメニューで利用可能なツールに慣れて、少し時間をかけてください。

おそらくより簡単で、より効果的で信頼性の高い解決策は、通常、WM_GETTEXTメッセージとWM_SETTEXTメッセージを使用することです。また、将来の質問を予測して、別のアプリケーションでボタンを押すには、ボタンのにBN_CLICKED通知を送信します。Spy ++を使用すると、メッセージの質問に対するより多くの回答を得ることができます。

于 2012-11-06T00:53:06.423 に答える