• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WM_CLEARなど使えないメッセージがある。)

外部ソフトでEditBoxを操作する際の注意点

このQ&Aのポイント
  • 外部ソフトからハンドルを取得して EditBox を操作しようとしています。WM_PASTE, WM_CHAR などは期待通りの動きをするのですが、WM_CLEAR, WM_SETTEXT などは無反応です。
  • 操作対象の EditBox に対して、PostMessage 関数を使用してメッセージを送信することで操作を試みていますが、一部のメッセージについては正常に動作しないようです。
  • 具体的には、WM_PASTE, WM_CHAR は正常に動作していますが、WM_CLEAR, WM_SETTEXT は何の反応も示しません。この問題を解決するためには、別の方法を検討する必要があります。

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

  • ベストアンサー
回答No.2

 こんにちは。御礼頂きました。  一応以下を「メモ帳のクライアント(エディットボックス)」と「MFCダイアログ上のエディットボックス」(両方とも外部プロセス)に向かって実行して出来たのですが、これでは無理でしょうか。 //テキストを全て選択 ::SendMessage(hEdit, EM_SETSEL, 0, -1); ::SendMessage(hEdit, WM_CLEAR, 0, 0);  ただ、他のウィンドウから操作しているので、  ::SetForegroundWindow(hEdit);  を適切なタイミングで入れないと、テキスト選択範囲の表示が反映されなかったりするようです。

remoconhand
質問者

お礼

ありがとうございます。 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^^; 本当にありがとうございました。

その他の回答 (1)

回答No.1

 こんにちは。  WM_CLEARは送った事がないのですが、WM_SETTEXTに関しては、SendMessage()APIでなければいけません。  恐らくWM_CLEARも同じかと。  http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_CLEAR.html

remoconhand
質問者

お礼

ありがとうございます。 質問に書いてある通り、WM_CLEAR は SendMessage でもダメなんです。 WM_SETTEXT は SendMessage でのテストを忘れてました。 WM_SETTEXT は SendMessage でOKになりました。 WM_SETTEXT で NULL を書けば同じなので回避できますが・・・

関連するQ&A