dポイントプレゼントキャンペーン実施中!

2日前に"sendkeysとfindwindow"というタイトルで質問した者です。
まだ解決できなくてまだ困っています。
内容は、
 今、MSDEをアンインストールするプログラムを組んでます。
 IsUn0411.exeをshell関数の引数にして、起動させると
 途中いくつかメッセージが出てきます。
 ユーザーには触らせたくないので、
 これらのメッセージを全てFindWindowで探して、
 SendKeysでキーを飛ばしました。
 アンインストール自体は出来るのですが、問題は
 最後の”コンピュータからプログラムの削除”という画面です。
 これも同じくFindWindowで探すことはできるのですが、
 最後SendKeysでキー("{ENTER}")を飛ばしても消えてくれなくて困っています(>_<)。
というもので、なぜメッセージが消えないのか原因が分かりました。

SendKeys関数で"{ENTER}"キーを送信してはいるのですが、
問題はタイミングでした。
”コンピュータからプログラムの削除”というウィンドウがアンインストール中に
すでに出ているため、"{ENTER}"キーを飛ばしてしまいメッセージが消えない・・・ということでした。

そこで、再び質問です。
アンインストールが終了して、OKボタンが有効になったときに"{ENTER}"キーを
送りたいのですが、何か良い方法はありませんか?
私が思いつくのはGetCodeExitProcssしかありません。
これだと完全にexeが終了した場合に使うものなので、
まだメッセージが残っているときは使えませんよね・・・。

では、よろしくお願いします。

A 回答 (2件)

ちょっと勘違いしていました。


そうすると、OKボタンのウィンドウハンドルを取得した後で、OKボタンの状態(有効か無効か)を調べ、有効なら SendMessage か SendKeys か、ということになりますね。
有効か無効かは、IsWindowEnabled で判定できると思います。
    • good
    • 0
この回答へのお礼

 ありがとうございました!!
 ようやくできました(T_T)

 私がやった流れとしては、
 (1)大本のWindowのプロセスを取得する。
 (2)プロセスからOpenprocessでハンドルを取得。
 (3)ループの中で、GetWindowで子ウィンドウのハンドルを取る。
 (終了条件は、FindWindowで画面があるかどうか)
 (4)取ったハンドルのクラス名を取る。
 (5)クラス名がボタンだった場合に、IsWindowEnabledで  有効かを見る。
 (6)ボタンが有効だった場合にキーと飛ばす。
                     です。

 API使いまくりで完成しました。
 知らないAPIばかりで勉強になりました。
 本当にありがとうございました☆

お礼日時:2004/01/08 20:32

(1) FindWindow でウィンドウハンドルを取得


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

この回答への補足

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

 まだ試していないので、とりあえずはやってみようと思います。
 引き続き、おつきあいください。
 よろしくお願いします。

補足日時:2004/01/08 11:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!