- C++相談室 part122 [無断転載禁止]©2ch.net
774 :デフォルトの名無しさん[]:2016/02/13(土) 08:07:18.11 ID:GG2kKfuP - 【SendMessage】関数【PostMessage】関数についてご教授下さい。
開発中のシステムからメモ帳のウィンドウハンドル(入力ウィンドウ)を取得し、 SendMessageやPostMessageを行っています。 PostMessageは成功するのですが、SendMessageが失敗してしまます。 なぜ、SendMessageが失敗するのか、原因をご教授下さい。 コードは以下の通りです。 ------------------------------- HWND wh = FindWindow(nullptr, p);//pは”無題 - メモ帳”です 本体のウィンドウハンドルを取得 wh = GetWindow(wh,5);//入力欄のウィンドウハンドルを取得 SendMessage(wh, WM_KEYDOWN, 'A', 0); PostMessage(wh, WM_KEYDOWN, 'B', 0); ------------------------------- このコードを実行すると b のみ出力され a が出力されません。 なぜでしょうか?環境面など悪さしてますか?それともコーディング間違いでしょうか? 同期処理を実現したいのでSendMessageが使いたいのです。 環境は以下です。 -------------- Windows7 Visual Studio C++ cli --------------
| - C++相談室 part122 [無断転載禁止]©2ch.net
777 :デフォルトの名無しさん[]:2016/02/13(土) 08:25:44.61 ID:GG2kKfuP - >>776
もちろんupも入れてみたんですが、やはりダメでした。 何が原因なんですかね・・・原因がわかれば納得できるのでpost使おうと思うのですが
| - Win32API質問箱 Build122
61 :デフォルトの名無しさん[]:2016/02/13(土) 08:27:03.25 ID:GG2kKfuP - 【SendMessage】関数【PostMessage】関数についてご教授下さい。
開発中のシステムからメモ帳のウィンドウハンドル(入力ウィンドウ)を取得し、 SendMessageやPostMessageを行っています。 PostMessageは成功するのですが、SendMessageが失敗してしまます。 なぜ、SendMessageが失敗するのか、原因をご教授下さい。 コードは以下の通りです。 ------------------------------- HWND wh = FindWindow(nullptr, p);//pは”無題 - メモ帳”です 本体のウィンドウハンドルを取得 wh = GetWindow(wh,5);//入力欄のウィンドウハンドルを取得 SendMessage(wh, WM_KEYDOWN, 'A', 0); PostMessage(wh, WM_KEYDOWN, 'B', 0); ------------------------------- このコードを実行すると b のみ出力され a が出力されません。 なぜでしょうか?環境面など悪さしてますか?それともコーディング間違いでしょうか? 同期処理を実現したいのでSendMessageが使いたいのです。 環境は以下です。 -------------- Windows7 Visual Studio C++ cli --------------
| - C++相談室 part122 [無断転載禁止]©2ch.net
796 :デフォルトの名無しさん[]:2016/02/13(土) 15:12:53.44 ID:GG2kKfuP - >>774
>>776 >>777 >>778 ありがとうございます。 SendMessage(wh, WM_CHAR, 'A', 0); で出来ました。 つまり、SendMessage でWM_KEYDOWN は使えないということですね? 次のステップなのですが、 「右矢印キーを2回押す」や「ctrl+Sを押す」といった事は、 SendMessageで行えますか?PostMessageを使うしかないでしょうか? コード例以下です。 「右矢印キーを2回押す」 SendMessage(wh, WM_KEYUP, VK_RIGHT, 0); SendMessage(wh, WM_KEYUP, VK_RIGHT, 0); 「ctrl+Sを押す」 SendMessage(wh , WM_KEYDOWN , VK_CONTROL , 0); SendMessage(wh , WM_KEYDOWN , 'S' , 0); SendMessage(wh, WM_KEYUP, VK_CONTROL, 0); SendMessage(wh, WM_KEYUP, 'S', 0);
| - Win32API質問箱 Build122
67 :デフォルトの名無しさん[]:2016/02/13(土) 15:16:29.22 ID:GG2kKfuP - >>62
送り先はあっています。 PostMessage(wh, WM_KEYDOWN, 'B', 0); が成功してますので・・・ >>63 >>64 >>65 >>66 ありがとうございます。 SendMessage(wh, WM_CHAR, 'A', 0); で出来ました。 つまり、SendMessage でWM_KEYDOWN は使えないということですね? 次のステップなのですが、 「右矢印キーを2回押す」や「ctrl+Sを押す」といった事は、 SendMessageで行えますか?PostMessageを使うしかないでしょうか? コード例以下です。 「右矢印キーを2回押す」 SendMessage(wh, WM_KEYUP, VK_RIGHT, 0); SendMessage(wh, WM_KEYUP, VK_RIGHT, 0); 「ctrl+Sを押す」 SendMessage(wh , WM_KEYDOWN , VK_CONTROL , 0); SendMessage(wh , WM_KEYDOWN , 'S' , 0); SendMessage(wh, WM_KEYUP, VK_CONTROL, 0); SendMessage(wh, WM_KEYUP, 'S', 0); ちなみにkeybd_eventやSendInputは最前面ウィンドウに対する操作になってしまうので、 使えないです。 ※ウィンドウが最前面か否かに関わらず常に安定した操作を実現したいのです
| - C++相談室 part122 [無断転載禁止]©2ch.net
799 :デフォルトの名無しさん[]:2016/02/13(土) 16:05:47.92 ID:GG2kKfuP - >>796
>>798 keybd_eventやSendInputは最前面ウィンドウに対する操作になってしまうので、 使えないです。 ※ウィンドウが最前面か否かに関わらず常に安定した操作を実現したいのです
| - Win32API質問箱 Build122
69 :デフォルトの名無しさん[]:2016/02/13(土) 16:13:10.53 ID:GG2kKfuP - >>68
ありがとうございます。 SendMessageCallback というものがあったんですね。 しかし、「SendMessage でWM_KEYDOWN は使えない」という原因の解決にはならないですね。
|
|