• 締切済み

DOSのSTARTコマンドでEXEを呼び出したときのウィンドウ制御について

お世話になります。 環境:WindowsVista 下記の様な構成のバッチファイルを作成し、実行したところ、 最終的に呼ばれているEXEのウィンドウが背面に隠れてしまいます。 <使用するファイル> バッチX バッチY 実行ファイルZ ( *.exe) <処理概要> 起動バッチを最新版に更新し、実行ファイルを起動する <処理の流れ> 1)バッチXをMouse-DblClickにて起動 2)バッチXにて、STARTコマンドでバッチYを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチX自身を終了 4)バッチYにて、STARTコマンドで実行ファイルZを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチY自身を終了 <問題> 上記(4)の時点で実行ファイルZが起動するのですが、  ・ウィンドウがアクティブにならない  ・Explorerなど他ウィンドウが有る時は、その背面として表示されてしまう。 という2点の問題があります。 <確認したこと> 単純に バッチ起動→実行ファイル呼び出し という、テスト用バッチを作って 実行したところ、上記のような問題はおこりませんでした。 推測するに、バッチを2段経由していることに拠ると考えています。 この辺りのウィンドウ制御についてご教授頂きたく、宜しくお願い致します。 佐藤

みんなの回答

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

親ウィンドウを認識していないからでしょうね。 Startコマンドでウィンドウのタイトルは指定できるわけですから、Win32APIで最前面にすればよいのではないでしょうか? まず対象のウインドウを検索する。 GetForegroundWindowで最前面のウィンドウハンドルを取得する。 GetNextWindowとGetWindowTextを使用して、該当のウインドウのハンドルを検索する。 SetForegroundWindowで当該ウインドウを最前面に設定する。 http://www.geocities.jp/asumaroyuumaro/program/winapi/window.html

関連するQ&A

  • startコマンドについて

    2年前に納品されたシステムで、今年の8月中旬と下旬に2度電源が落ち(1度目は停電?、2度目は間違ってコンセントを抜いたらしい)、あるソフトが頻繁に参照/更新している作業ファイルの中身が消えてしまい、正常動作しなくなる事がありました。 本来なら、そのソフトが作業ファイルを頻繁に参照/更新する処理を改造すべきだと思うのですが、製作者が長期休暇(体調不良)に入っている為、最新のソースが手に入りません。 作業ファイルの中身があれば($$$=**等)正常に動作するので、元になる作業ファイルを準備しておき、そのファイルをコピー後、そのソフトが起動するバッチファイルを作成し、スタートアップでコールされるショートカットと入れ替えました。 バッチファイルでそのままソフトを実行すると、そのソフトが終了するまでDOS窓が開いたままとなるので、「startコマンド」を使用しました。 バッチファイルは、以下の通りです。 ECHO OFF copy ABC1_Base.dat ABC1.dat copy ABC2_Base.dat ABC2.dat copy ABC3_Base.dat ABC3.dat start ABC.exe EXIT この対応を9月16日に行ったのですが、それから2度、 Runtime Error! Program:C:\Program Files\~\XYZ.EXE abnormal program termination が発生しました。 ※「XYZ.EXE」は、「ABC.exe」が起動し、「XYZ.EXE」が起動していなければ Shell関数で起動させるソフトです。 ※ABC.exe:VisualBasic6.0にて作成 ※XYZ.exe:VisualC++6.0にて作成 2年前に納品されてから、1度も「Runtime Error」は起きていない為、「startコマンド」が原因ではないかと上司から指摘されました。 「startコマンド」でぐぐって調べてみましたが、「Runtime Error」が起きたという報告は見付かりませんでした。 どなたか、「startコマンド」についての情報をお持ちの方はいらっしゃいませんか? 長文となってしまいましたが、よろしくお願いします。

  • DOSのコマンドがわかりません

    Windows(95,98,NT,2000)上で作動するバッチファイルを作っています。 そこで、ユーザに、本当に処理を実行して良いか(y/n)で判断させるようなロジックにしたいのですが、判定させるコマンドがわかりません。 CHOICEコマンドも使ってみたのですが、CHOICEコマンドを実行させるためのCHOICE.comは、NT,2000には標準で無いらしいのです。 何か95,98,NT,2000に共通のコマンドがありましたら、教えて下さい!

  • DOSの終了

    教えてください。 DOSでバッチを作成したのですが、 終了のコマンドって「exit」ですよね。 それを入力したのですが、終了してくれません。。。 なぜでしょうか??? えっと、実際に入力したコマンドは 「start winpopup.exe(エンター) exit」です。 ちゃんとwinpopupは起動するのですが、DOS画面が終了しません。 どなたか教えてください。

  • EXEの起動について

    プログラムの連続起動をバッチファイルで作成しています。 本体(A.EXE)を連続起動させるべくfor文でテキストファイルを読み込み引数を与えながら起動して、ということをしたいのですが、A.EXEは自動で終了するもののワケあって終了した状態を取得できません。 そこで監視(B.EXE)を実行してA.EXEの終了を待つプログラムを用意しました。 for文の中でA.EXE起動→5秒待ち→B.EXE起動(バッチは待ち状態)→A.EXE終了→B.EXE終了(バッチ待ち解除)→2回目のA.EXE起動…という流れを想定していますが、B.EXEが待ち状態にならずA.EXEが実行されてしまいます。 バッチの中身をコマンドプロンプトで実行するとB.EXEは待ち状態となるのですがバッチ実行すると待ち状態になりません。 なにが原因かわからず質問いたしました。 ご助力いただけると助かります。 以下はバッチ内容です(for文は除きます)。 ----------------- start C:\work\A.EXE timeout 5 start /w C:\work\B.EXE ----------------- よろしくお願いします。

  • 【DOSコマンド】バックグラウンドでの実行

    お世話になります。 Windows環境にて、DOSのコマンドから、とあるプログラムを起動したいと考えております。 例えば、『c:\hidemaru.exe (改行) exit;』 という感じで。しかし、このままではプログラムを実行中はDOS画面が起動したままになってしまいます。 そこでプログラムは起動し、DOS画面は閉じる、といった書き方をご存知の方はいらっしゃいますでしょうか? よろしくお願いいたします。

  • DOSコマンドの削除で・・・

    DOSコマンドを使って、指定ファイルの削除バッチを作成し、タスク管理で自動実行しようと試みたのですが、DOS窓でy/nの返答を返さないと先に進まず自動的に実行が出来ません。 いい方法があれば教えてください。

  • バッチファイルのDOS窓について

    こんにちは Windows7Ulti32ビットを使用しています セキュリティホール云々とはいわれていますが、やはりガジェットは使い心地がよく 継続して使用したいと思っています ただ、数回に1回しかガジェットの表示がされず、他の時にはガジェットが表示されません。 sidebar.exeをkillして、再度sidebar.exeを起動すると復活するのですが、毎回やるのは 面倒なのでバッチでkillして再起動しようと思いました ところがそのバッチのdos窓が閉じずに、、今度はそちらで悩んでいます 以下に記載するバッチファイルを実行後、DOS窓を閉じるには どのようにバッチファイルを作成すればいいのでしょうか? SideBarCtrl.bat @echo off taskkill /im sidebar.exe /f > nul start "" timeout 2 > nul start /min cmd /c,"C:\Windows\winsxs\x86_microsoft-windows-sidebar_31bf3856ad364e35_6.1.7601.17514_none_d0e415a884ea33e1\sidebar.exe" exit

  • Windows 7 64bitでのreg.exe

    cmd.exe起動直後にregと打っても、  'reg' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません と表示され、実行できません。 C:\Windows\System32まで移動すれば使えるのですが…… C:\Windows\System32にあるコマンドプロンプトで使える実行ファイルはどこに居ても使えるものだと思っていたのですが、違うのでしょうか? また、どこに居ても使えるようにする方法はありますでしょうか?

  • バッチフィルで起動した別ウインドウを閉じるには

    バッチファイルの中から別のコマンドプロンプトを起動して そこでコマンドを実行した後、この別起動したコマンドプロンプト のウインドウを閉じるにはどのようにすればよいでしょうか。 例えば、以下のバッチファイルを コマンドプロンプト(ウインドウ1)から実行すると もうひとつ別のコマンドプロンプト(ウインドウ2)が 起動してcopyコマンドが実行されますが 何分かしてコピーが終了して ウインドウ2はコマンド待ちの状態になりますが ウインドウ2は開いたままです。 この後、別のコマンドプロンプトを起動して 別の処理を行わせたいのですが その数だけ別ウインドウが表示されてしまいます。 ウインドウ2の処理が終わったらウインドウ2を閉じるには どのようにすればよいでしょうか。 (Windows7) ---test.bat------------ start copy /b c:\test1\test.exe c:\test2 -------------------------

  • DOSから起動した際のSQLPLUSウィンドウ表示

    OS:WINDOWS NT4.0 ORACLE Personal 7.3.4 VBのアプリケーションを作成しています。 行う内容は  (1)VBのフォームでボタン押下  (2)DOS(バッチファイル)起動  (3)バッチファイルよりORACLE SQLPLUS起動   (USERのDROP&CREATE実行)  (4)バッチファイルよりORACLE IMPORT実行   (指定ファイルのIMPORT) です。 処理的には問題ないのですが、(3)の実行時にSQL*PLUSのウィンドウが見えてしまいます。 (2)の実行時に「START /MIN ~(SQLPLUSコマンド)」を行っている為か、ORACLE9ⅰですとSQLPLUSの表示はされないのですが、今回対象の7.3.4だと見えてしまいます。 見栄えが悪いところを突っ込まれているので、最小化でも構わないのですが、SQLPLUSの起動オプション等には特に解決できるものは探すことができませんでした。  なにか有効な方法をご教授いただきたいです。 みなさま宜しくお願いします。

専門家に質問してみよう