トップページ > プログラム > 2016年02月13日 > GG2kKfuP

書き込み順位&時間帯一覧

7 位/208 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000030000002200000007



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part122 [無断転載禁止]©2ch.net
Win32API質問箱 Build122

書き込みレス一覧

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 は使えない」という原因の解決にはならないですね。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。