-1

私は、クリップボードにテキストコンテンツを含めるキーストロークctrl-aとctrl-cを処理して送信するアプリケーションを作成しようとしています。

正しい API はPostMessage「Sendmeesage」だと読みました。APIを使用すると、プログラム(メモ帳など)に書き込むことができます。しかし、キーストロークを送信できませんでした。

ここに私のコードがあります

    public const uint WM_KEYDOWN = 0x0100;
    public const uint WM_KEYUP = 0x0101;
    const int CTRL = 0x11;
    const int A_Key = 0x41;
    const int C_Key = 0x43;

    static void Main(string[] args)
    {
        IntPtr hWnd = FindWindow(null, "Microsoft Word ");
        hWnd = FindWindowEx(hWnd, null, "Edit", null);
        //PostMessage(hWnd, WM_GETTEXT, 0x11, 0);
        Process[] processes = Process.GetProcessesByName("winword");
        foreach (Process p in processes)
        {

            PostMessage((IntPtr)hWnd, WM_KEYDOWN, (IntPtr)CTRL, 1);
            PostMessage((IntPtr)hWnd, WM_KEYDOWN, (IntPtr)A_Key, 1);
            PostMessage((IntPtr)hWnd, WM_KEYUP, (IntPtr)A_Key, 1);
            PostMessage((IntPtr)hWnd, WM_KEYUP, (IntPtr)CTRL, 1);

                }
            } 

私は何を間違っていますか?

4

1 に答える 1

0

おそらく、適切なニーズを満たすために間違った API を使用している可能性があります。メッセージのシーケンスがコード化したとおりであることに気付くかもしれませんが、その順序でメッセージを投稿すると、思った通りにならない場合があります。この方法で解決しようと決心している場合は、<<この投稿>> を読んで、少しの遅延が役立つかどうかを確認してください。ただし、同様のシナリオに対応するように設計された SendInput() 関数を使用するより良いアプローチを採用することをお勧めします。詳細については、<<このリンク>> および <<このリンク>> を確認してください。

于 2013-01-06T17:49:37.200 に答える