.BATファイルのプロパティの「〜〜閉じる」を手動ではなくVBで「レ」(チェック)にする方法はないのでしょうか?LANで使用すると一人が設定しても他の人はそれぞれで設定しなければならないようですが、何か良い方法はないのでしょうか?
常駐プログラムを作って、ある時間間隔で、デスクトップ上の
ウィンドウや、クラスネームを、FindWindow等で監視し、DOS
窓の終了ウィンドウを発見したら、そのウィンドウに対し、
WM_QUIT とか、WM_CLOSE とかのメッセージをSendMessage と
かPostMessageすれば、良いと思います。
※ ウィンドウのタイトル(キャプッション)やクラスを取得
するには、VisualC++ か、VisualStudio6 で、SPY++ を、
インストールしていないことには、欲しい機能を作ること
ができません。
お気をつけ下さい。
ただし、DOS窓の中身が実行中であるかどうかについては、
ウィンドウタイトルで判断できない場合、確かどこかにあった
とは思いますが、実行中のプロセス一覧を取得し、その中で
停止、もしくは応答なしになっているものを探し出すと言う
手法が必要になります。
OSにも依存しますので・・・
ご検討下さい。
以上。
追伸・・・
WinBatchEh とか、WinBatch で、同様のことができると思います。
が、あくまで、動作中であるかどうかと言う部分を除外しての事
でうすので・・・あしからず・・・
※ WinBatch は高いですが、WinBatchEh は安価ですので、
お試し期間中に、実行確認できれば、それでもよいの
では・・・
以上。
ご返答ありがとうごどいます。「++等、インストールしていない事には〜」とありますが、コマーシャルベースなので新たなインストールはできません。EXCELかACCESSのVBしか使用できませんので無理という事でしょうか?
ソフトを作成するに、動作内容を確認する環境が必要です。
ターゲットマシン上に新たに何かを入れることができない
のであれば、不可能だと思います。
繰り返し実験して、追い込んでいく時間があるのでしたら
WinBatchEh とか使ってみて、DOS窓のクローズが実現可能
かどうか、実験あるのみです。
実験的要素ですが・・・
仮にWinXPでDOS窓出したら、そのウィンドウのクラスは、
SPY++では、『ConsoleWindowClass』となります。
そういうクラスを持っているウィンドウを探すという機能
が必要なので、現在、ターゲットとされておりますマシン
のOS上で、DOS窓のクラスが何であるのか・・・
それを調べるツールが無いと・・・
ウィンドウのキャプションで、手当たり次第に探してと言
う方法もありますが・・・
ご検討下さい。
以上。
ありがとうございます。他のアプリからCLOSEするだけならaccessのVBでもFindWindowとPostMessageで出来るのですが、都合で.BATの起動が必要で、それをBAT自身で「閉じる」をしたい為、この「レ」のフロパティを付けたいのですが・・・・・、やはり無理そうですね。(;_;)
BAT自身では無理ですが・・・
因みに、動作環境としてのOSは?
Win95/98/98SE/Me でしょうか?
以上。
Win95です。えっ、BAT自身では無理とありますが、「レ」を付けていれば自動的にCLOSEしますよね。このプロパティを「外から操作」したいだけなのですが・・・・・、??
横から失礼します。IMAと申します。
このHPが参考になるはずです。
http://www.codeguru.com/vb/openfaq/comments/44.shtml
整理しますと、
batファイル自身は、単なるテキストファイルですので、「レ」を付けるような
プロパティは岡田さんの記載のように持っていませんし、できません。
なぜ、バッチファイルのプロパティを表示するとそのようなものが出るのかと
申しますと、windowsが例えばtemp.batを作成すると自動的にtemp.pifと言う
バイナリーファイルを作成します。(隠し属性が付いていますので、エクス
プローラで "すべてのファイルを表示" にしないと見れません)
バイナリーエディタなどで見ますと、前半が各種プロパティーが記載され、
後半がバッチファイルのテキストファイルをコピーしているようです。
このファイルをバッチファイルのプロパティ表示時に自動的に読みに行くと
考えられます。
したがって「レ」を付けるには、このpifファイル構造を解析して編集する
必要があるはずです。
残念ながら私にはその知識はありません。
ただ、参照リンクにはwindowsディレクトリの_DEFAULT.PIF を編集すれば
今後作成する?すべてのバッチファイルの初期設定を変更できるように記載
されています。
私は、win2000,me,98 の環境しかありませんので、95で _DEFAULT.PIF が
存在するかは確認できませんでした。
ご参考になれば幸いです。
参考リンク追加です。
http://search.acty-net.ne.jp/mfc_search/archive/2001-1/msg03571.html
http://www.nc.kyushu-u.ac.jp/~kasahara/diary/1998/01a.html
>それから、PIF ファイルの無い DOS プログラムのデフォルトの動作を設定する方法という
>のが Microsoft のウェブページに書いてあったので、試してみた。 windows フォルダの
>下で command.com のショートカットを _DEFAULT という名前で作って(DOS ファイル名は
>_DEFAULT.PIF)、そのプロパティを変更すればよい。 で、確かにこれで DOS プログラム
>の動作には変化があったのだが、やはりプロパティで見るとデフォルトではバッチファイル
>の項目に DOSIME とか書いてあってこっちは変化してくれないような気がする。
>MSIME95 の時は空だったのだが、MSIME97 にした時に変更されてしまったので、どこかに
>書かれているのは間違いないのだが、見つけることができない。
IMAさん、有難うございます。テストすると確かに「今後作成するもの」はそのようですね。ただ、「以前のもの」はどうするか?、うぅーーーん。LANの関係で残念ながらこの方法では不都合です、結局、結論は「駄目」という事みたいで諦めますが・・・
>テストすると確かに「今後作成するもの」はそのようですね。
>ただ、「以前のもの」はどうするか?、うぅーーーん。
>LANの関係で残念ながらこの方法では不都合です
>、結局、結論は「駄目」という事みたいで諦めますが・・・
いかなる保証や責任は持てませんが以下の方法でたぶん可能です。
(必ず、batファイルのバックアップを取ってから実験してください。)
すなわち、pifファイルは最初からあるのではなく、batファイルを
最初に実行する際にWindowsが勝手に_DEFAULT.pifを雛型に作成します。
これを利用するのです。
実験1
あるbatファイルと同名のpifファイルを削除してみてください。
そしてそのbatファイルを実行してみてください。
新しいpifファイルが作成されたでしょう!
そして_DEFAULT.pifが「プログラム終了時にウィンドウを閉じる」
となっていれば、新しいpifファイルにも反映されているはずです。
それがOKならば、判りましたね!!
そうです、PC原始人さんの修正したいbatファイルと同名のpifファイルを
すべてVB(VBA)で削除するのです。
( batファイルは必ず残してください。)
そうすると新しいpifファイルが作成され「プログラム終了時にウィンドウ
を閉じる」にチェックが入っていますから、次回の実行からはDos窓が
自動的に閉じるはずです。
ご参考:
Windows2000では最初から_DEFAULT.pifの設定が「プログラム終了時に
ウィンドウを閉じる」に「レ」(チェック)が入っています。
この設定が他のbatファイルに問題を起こす可能性が予想される場合は
トライしない方が良いかも。
(しかし、またpifファイルを元の設定で作り直せば復旧できるとは
思いますが・・・ あくまでも自己責任でね! )
ツイート | ![]() |