こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WM_CLEARなど使えないメッセージがある。

WM_CLEARなど使えないメッセージがある。

外部ソフトからハンドルを取得して EditBox を操作しようとしています。
PostMessage/SendMessage で該当 EditBox にメッセージを送るのですが

WM_PASTE, WM_CHAR などは期待通りの動きをするのですが
WM_CLEAR, WM_SETTEXT など無反応です。

PostMessage( hwnd, WM_PASTE, 0, 0 ); // Operated
PostMessage( hwnd, WM_CHAR, (int)msg[i], 0 ); // Operated

PostMessage( hwnd, WM_CLEAR, 0, 0 ); // Not Operated
PostMessage( hwnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"ABC" ); // Not Operated

よろしくお願いします。

投稿日時 - 2010-05-05 13:20:33

QNo.5873055

困ってます

質問者が選んだベストアンサー

 こんにちは。御礼頂きました。

 一応以下を「メモ帳のクライアント(エディットボックス)」と「MFCダイアログ上のエディットボックス」(両方とも外部プロセス)に向かって実行して出来たのですが、これでは無理でしょうか。

//テキストを全て選択
::SendMessage(hEdit, EM_SETSEL, 0, -1);
::SendMessage(hEdit, WM_CLEAR, 0, 0);

 ただ、他のウィンドウから操作しているので、

 ::SetForegroundWindow(hEdit);

 を適切なタイミングで入れないと、テキスト選択範囲の表示が反映されなかったりするようです。

投稿日時 - 2010-05-05 15:44:29

お礼

ありがとうございます。

An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control.

この current selection という部分がキーだったんですね。
入力フィールドをマーキングして WM_CLEAR を送ったらマーキング部分のみ消されました。

もちろんご指導いただいた
::SendMessage(hEdit, EM_SETSEL, 0, -1);
ですべてマーキング作業を加えると、手作業同様消えました。

Ooops^^;

本当にありがとうございました。

投稿日時 - 2010-05-05 16:46:11

このQ&Aは役に立ちましたか?

17人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

 こんにちは。

 WM_CLEARは送った事がないのですが、WM_SETTEXTに関しては、SendMessage()APIでなければいけません。
 恐らくWM_CLEARも同じかと。

 http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_CLEAR.html

投稿日時 - 2010-05-05 13:37:32

お礼

ありがとうございます。

質問に書いてある通り、WM_CLEAR は SendMessage でもダメなんです。

WM_SETTEXT は SendMessage でのテストを忘れてました。
WM_SETTEXT は SendMessage でOKになりました。

WM_SETTEXT で NULL を書けば同じなので回避できますが・・・

投稿日時 - 2010-05-05 14:08:59

あなたにオススメの質問