
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのバージョン2016フリーズ改善策 5 2022/12/13 09:13
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(Microsoft Office) Offece Home&Business2016をアンインストールする方 1 2022/04/08 23:23
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- Windows 10 パソコンの起動時、画面が黒いままのトラブルにつきまして。 4 2022/10/02 18:02
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SetWindowText関数について
-
VBでRegisterWindowMessage関数...
-
メッセージボックスの選択ボタ...
-
VBAでコントロールのハンドルを...
-
WM_CLEARなど使えないメッセー...
-
16進数入力制限方法
-
点滅で知らせる方法
-
マウスの左クリックの内容を知...
-
Sendkeysのタイミング
-
windowsメールスロットについて...
-
CloseHandle()
-
デスクトップ上のアイコンの位...
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
コントロールの書式設定で、“コ...
-
コンボボックス内の文字サイズ変更
-
「アイテムは収集されました」...
-
エクセルのコントロールツール...
-
ラジオボタンの初期指定
-
Minecraft 統合版(PC)の描画距...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
他のウィンドウのボタンを自動...
-
VB.netでFindWindowExやると・...
-
デスクトップ上のアイコンの位...
-
メッセージハンドラ
-
VBAでコントロールのハンドルを...
-
システム例外のメッセージを変...
-
VBでRegisterWindowMessage関数...
-
VC++(MFC)でタスクバーに常駐し...
-
VBA 複数セルが空白なら印刷さ...
-
16進数入力制限方法
-
グローバルフック(SetWindowsH...
-
マウスホイールをフックしたい
-
WM_NCLBUTTONUPについて
-
キーボード入力をHSPでさせたい...
-
点滅で知らせる方法
-
チェックボックスのキーダウン...
おすすめ情報