現在VC++6.0のMFCを使用してWindowsプログラミングをしております。
以下が質問になります。
同環境で、アクディブウィンドウ内の、フォーカスがあるエディットボックスに、何かボタンをクリックする事で、文字列を貼り付けるにはどのようにプログラミングしたらよいのでしょうか?
過去にIEに対する質問がありましたが、それを見てもわからなかったので、ご教授お願い致します。
ボタンを押した時点でフォーカスが移ってしまうので、
そのときに直前のフォーカスがどこにあったのか判定するのは不可能のでしょう。
ですので、対象エディットボックスのEN_SETFOCUSイベントで
フォーカスを取得したときに覚えておくという方法にするとか。
私がやりたいのは、ボタンがあるウィンドウではなくてそれとは別のウィンドウにあるエディットボックスに対してです。ですので「EN_SETFOCUS」イベントを使用するのは無理です。
>ボタンを押した時点でフォーカスが移ってしまうので、
>そのときに直前のフォーカスがどこにあったのか判定するのは不可能のでし>ょう。
これに関しては、OnTimerを使用して常に自分以外のアクティブなウィンドウのハンドルをGetForegroundWindowにより取得できています。ただ、ハンドルだけでは、ウィンドウのタイトルをSetWindowTextで変えられても、エディットボックスには、どうやっても貼り付けられません。
ハンドルと同様にエディットボックスのコントロールIDを取得できれば問題は解決できると思うのですが、どうやったらよいのか全くわかりません。
再びご教授お願い致します。本当にお忙しい中大変申し訳ございません。
また、説明不足で誤解を招いてしまい大変ご迷惑をおかけ致しました。
他のウィンドウに移ったら入力カーソル消えるし…ってつっこみはなし?
基本的には貼付対象になる画面にGetFocusでいけるんじゃないでしょうか。
貼付対象になる画面にはエディットの他にコントロールはありますか?
それによっては判定(クラス情報取得)いれないといけないですよね。
ご回答ありがとうございます。
>他のウィンドウに移ったら入力カーソル消えるし…ってつっこみはなし?
これに関しては、OnTimerにより常にアクティブな自分以外のウィンドウのハンドルを取得しているので問題はないのです。
>基本的には貼付対象になる画面にGetFocusでいけるんじゃないでしょうか。
GetFocusも試みました。
しかし自分以外のウィンドウのフォーカスに対しては意味がない事がわかりました。
>貼付対象になる画面にはエディットの他にコントロールはありますか?
はい。あります。
というより、他のアクティブなウィンドウというのは、自分が作ったアプリではないので、様々なコントロールがあります。
>それによっては判定(クラス情報取得)いれないといけないですよね。
そのクラス情報(コントロールID等)はどのようにして取得できるのでしょうか?
それさえ取得できれば、問題は解決できるのですが...
以上よろしくお願い致します。
> GetFocusも試みました。
> しかし自分以外のウィンドウのフォーカスに対しては意味がない事がわかりました。
別プロセスのフォーカス情報を得るには、
そのプロセスの入力状態にアタッチしなければなりません。
AttachThreadInput を参照。
>そのクラス情報(コントロールID等)はどのようにして取得できるのでしょうか?
GetClassInfoExとかGetDlgCtrlIDとか
みなさま大変お世話になりました。
AttachThreadInputとGetFocusの連携により無事に解決致しました。
ツイート | ![]() |