• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Sendkeysのタイミング)

SendKeys関数でのタイミング問題とは?

このQ&Aのポイント
  • SendKeys関数を使用してアンインストール中のウィンドウに対して"{ENTER}"キーを送信してもメッセージが消えない問題が発生しています。
  • アンインストールが終了し、OKボタンが有効になったタイミングで"{ENTER}"キーを送る方法を探しています。
  • GetCodeExitProcssはメッセージが残っている場合には使用できず、良い解決方法を知りたいという質問です。

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

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

ちょっと勘違いしていました。 そうすると、OKボタンのウィンドウハンドルを取得した後で、OKボタンの状態(有効か無効か)を調べ、有効なら SendMessage か SendKeys か、ということになりますね。 有効か無効かは、IsWindowEnabled で判定できると思います。

hemakozo
質問者

お礼

 ありがとうございました!!  ようやくできました(T_T)  私がやった流れとしては、  (1)大本のWindowのプロセスを取得する。  (2)プロセスからOpenprocessでハンドルを取得。  (3)ループの中で、GetWindowで子ウィンドウのハンドルを取る。  (終了条件は、FindWindowで画面があるかどうか)  (4)取ったハンドルのクラス名を取る。  (5)クラス名がボタンだった場合に、IsWindowEnabledで  有効かを見る。  (6)ボタンが有効だった場合にキーと飛ばす。                      です。  API使いまくりで完成しました。  知らないAPIばかりで勉強になりました。  本当にありがとうございました☆

その他の回答 (1)

回答No.1

(1) FindWindow でウィンドウハンドルを取得 (2) GetWindow、GetTopWindow、GetNextWindow のあたり、あるいは EnumChildWindow を使用して、(1) のウィンドウの子ウィンドウの中からOKボタンを探す。 (確か VB5.0 からだったか、VB のユーザー関数のアドレスを API に渡すことができるようになったので、VB でも EnumChildWindow が使用できるような気がします。実際にやったことはないので、よくわからないですけど。) (3) OKボタンが見つかれば SendKeys か SendMessage か何かの処理をする。 ( SendMessage の方が誤動作の可能性がなくて確実だと思います。) のような感じになるのではないでしょうか。

hemakozo
質問者

補足

 回答ありがとうございます。  でも、ちょっとひとつだけひっかがる点が・・・。  (3)の"OKボタンが見つかれば SendKeys かSendMessage か何かの処理をする。"です。  私が制御したい画面は、アンインストール中にすでに  OKボタンが存在しています。  ボタンが無効になっている状態なのです。  だから、ボタンが有効になったときに"{ENTER}"キーを  飛ばしたいと思いまして・・・。  なので、tsukasa-12rさんのおっしゃる方法は有効なのでしょうか??  まだ試していないので、とりあえずはやってみようと思います。  引き続き、おつきあいください。  よろしくお願いします。

関連するQ&A