- ベストアンサー
※ 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 は何の反応も示しません。この問題を解決するためには、別の方法を検討する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。御礼頂きました。 一応以下を「メモ帳のクライアント(エディットボックス)」と「MFCダイアログ上のエディットボックス」(両方とも外部プロセス)に向かって実行して出来たのですが、これでは無理でしょうか。 //テキストを全て選択 ::SendMessage(hEdit, EM_SETSEL, 0, -1); ::SendMessage(hEdit, WM_CLEAR, 0, 0); ただ、他のウィンドウから操作しているので、 ::SetForegroundWindow(hEdit); を適切なタイミングで入れないと、テキスト選択範囲の表示が反映されなかったりするようです。
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
回答No.1
こんにちは。 WM_CLEARは送った事がないのですが、WM_SETTEXTに関しては、SendMessage()APIでなければいけません。 恐らくWM_CLEARも同じかと。 http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_CLEAR.html
質問者
お礼
ありがとうございます。 質問に書いてある通り、WM_CLEAR は SendMessage でもダメなんです。 WM_SETTEXT は SendMessage でのテストを忘れてました。 WM_SETTEXT は SendMessage でOKになりました。 WM_SETTEXT で NULL を書けば同じなので回避できますが・・・
お礼
ありがとうございます。 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^^; 本当にありがとうございました。