
2日前に"sendkeysとfindwindow"というタイトルで質問した者です。
まだ解決できなくてまだ困っています。
内容は、
今、MSDEをアンインストールするプログラムを組んでます。
IsUn0411.exeをshell関数の引数にして、起動させると
途中いくつかメッセージが出てきます。
ユーザーには触らせたくないので、
これらのメッセージを全てFindWindowで探して、
SendKeysでキーを飛ばしました。
アンインストール自体は出来るのですが、問題は
最後の”コンピュータからプログラムの削除”という画面です。
これも同じくFindWindowで探すことはできるのですが、
最後SendKeysでキー("{ENTER}")を飛ばしても消えてくれなくて困っています(>_<)。
というもので、なぜメッセージが消えないのか原因が分かりました。
SendKeys関数で"{ENTER}"キーを送信してはいるのですが、
問題はタイミングでした。
”コンピュータからプログラムの削除”というウィンドウがアンインストール中に
すでに出ているため、"{ENTER}"キーを飛ばしてしまいメッセージが消えない・・・ということでした。
そこで、再び質問です。
アンインストールが終了して、OKボタンが有効になったときに"{ENTER}"キーを
送りたいのですが、何か良い方法はありませんか?
私が思いつくのはGetCodeExitProcssしかありません。
これだと完全にexeが終了した場合に使うものなので、
まだメッセージが残っているときは使えませんよね・・・。
では、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ちょっと勘違いしていました。
そうすると、OKボタンのウィンドウハンドルを取得した後で、OKボタンの状態(有効か無効か)を調べ、有効なら SendMessage か SendKeys か、ということになりますね。
有効か無効かは、IsWindowEnabled で判定できると思います。
ありがとうございました!!
ようやくできました(T_T)
私がやった流れとしては、
(1)大本のWindowのプロセスを取得する。
(2)プロセスからOpenprocessでハンドルを取得。
(3)ループの中で、GetWindowで子ウィンドウのハンドルを取る。
(終了条件は、FindWindowで画面があるかどうか)
(4)取ったハンドルのクラス名を取る。
(5)クラス名がボタンだった場合に、IsWindowEnabledで 有効かを見る。
(6)ボタンが有効だった場合にキーと飛ばす。
です。
API使いまくりで完成しました。
知らないAPIばかりで勉強になりました。
本当にありがとうございました☆
No.1
- 回答日時:
(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さんのおっしゃる方法は有効なのでしょうか??
まだ試していないので、とりあえずはやってみようと思います。
引き続き、おつきあいください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他のウィンドウのボタンを自動...
-
vbaから他のアプリを終了
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
DEVICECHANGE() の受け取り
-
Excel VBA で外部アプリケーシ...
-
msgboxの表示位置
-
Elseifのコードが分かりません...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
エクセルで作った新しいウイン...
-
Minecraft 統合版(PC)の描画距...
-
勝手にウィンドウが開いて止ま...
-
エクセルのコントロールツール...
-
MFCでハンドルを取得するには
-
ラジオボタンの初期指定
-
スピンボタンを右クリックして...
-
confirmダイアログの表示文字に...
-
VB.NET2005 TextBox 高さ(Heig...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
SetWindowText関数について
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
VBAでコントロールのハンドルを...
-
メッセージハンドラ
-
点滅で知らせる方法
-
ウインドウが閉じたことを知る方法
-
SendMessage で ESC など
-
キーボード・フックのアプリを...
-
VB.netでFindWindowExやると・...
-
WM_NCLBUTTONUPについて
-
WINAPI 他のウインドウを重ね...
-
システム例外のメッセージを変...
-
VBでRegisterWindowMessage関数...
-
デスクトップ上のアイコンの位...
-
チェックボックスのキーダウン...
-
VBでRegisterWindowMessage関数...
-
C# の MDI
おすすめ情報