質問: C#でWin32APIのSendMessage()を使用して他アプリにCtrl+Nを送り制御するアプリを作ろうとして行き詰っています。 SendMessage()を使うのは今回が初めてです。 [DllImport] private static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam); と定義しており、 PostMessage(hWnd,0x0100,0x11,0x01); // Ctrl PostMessage(hWnd,0x0100,0x4e,0x01); // N Thread.Sleep(100); PostMessage(hWnd,0x0101,0x4e,0x01); // N PostMessage(hWnd,0x0101,0x11,0x01); // Ctrl というコードを書いているのですが、ダウンロードしたオンラインソフトからは制御できるアプリが制御できません。 spy++で監視していますがウインドウハンドルは正常でメッセージは送られているようなのですが、何が悪いのでしょうか? SendMessage()でメッセージを送り制御する際に何に留意しなければならないかアドバイス頂けないでしょうか?
回答: こんにちは。 送りたい対象のウィンドウをForegroundにして、SendInput関数で送ってみてはどうでしょうか? 少し古い経験ですがkeybd_event関数が一番確実でした。今はkeybd_eventはSendInputに取って代わられたようです。 ところで、SendMessage()ではなくてPostMessage()で送ってますね。この2つは異なるAPIです。受け取り側の処理が大きく異なります。