
Shell()関数を使ってほかのアプリケーションを起動し、終了を待つというよくある件なのですが、
ちょっと古くて、VB4.0の16ビット版による開発で、
動作環境はWindosXP(32ビット)です。
下記のように記述していますが、Shellの戻り値が&HFFFFを超えるためか、うまくいかないときがあります。
Private Declare Function GetModuleUsage Lib "Kernel" _
(ByVal hModule As Integer) As Integer
Private Sub Command1_Click()
Dim hInst As Integer
hInst = Shell("calc.exe", vbNormalFocus)
While GetModuleUsage(hInst) <> 0
DoEvents
Wend
MsgBox " 終了しました ", vbInformation
End Sub
ただしWindows98でも動作する必要があるので、32ビットにしてしまうというのはなしです。
どのようにしたらうまくいくのでしょうか?
アドバイスください。お願いします。
No.3ベストアンサー
- 回答日時:
>速度がかなり遅くなるとかいうようなことはないでしょうか?
可能性はあります。
しかし、ループでまわして判断する方法も、メモリを消費すると思います。
影響度は、環境がないため検証ができません。
それと#2さんへの補足欄に書いてあるOSの見分け方法ですが、
http://www.bcap.co.jp/hanafusa/VBHLP/Version.htm
でOSのバージョンを取得する方法があります。
私の自宅では、16bitのOS環境は倉庫に眠っておりますので、これまた未検証のまま無責任にURLを張っております。
とにかく、私には環境が無いので
「たぶん」「おそらく」
でしか言えません。
すいません。。。
前回教えていただいたWScriptの方法は、
VBSファイルをテキストで作成して直接実行する方法は98でもうまくいったのですが、
VBからCreateObjectでCallすると、32ビット版ではできて16ビット版ではダメでした。
今度こちらの方法を試してみたいと思います。
ご親切なアドバイスありがとうございます。
No.4
- 回答日時:
こんなサイトを見つけました。
これじゃだめですかね?
Win32APIっていうぐらいだからなぁ・・・。
参考URL:http://www.kit.co.jp/vbit/,http://www.kit.co.jp/ …
No.2
- 回答日時:
GetExitCodeProcess
だそうです。
GetModuleUsage
は16ビットだそうです。
参考URL:http://www.microsoft.com/japan/developer/library …
この回答への補足
ありがとうございます。
それはわかっているのですが、16ビット環境なのか32ビットなのかを判別して、これらを切り替えて使うということなどできるのでしょうか?
もし可能なら、簡単なコーディングを教えていただけませんか?
No.1
- 回答日時:
シェルオブジェクトで実行するとかではダメ?
Call CreateObject("WSCript.Shell").Run("calc.exe", , True)
MsgBox " 終了しました ", vbInformation
ありがとうございます。
98でもXPでも動作しました。
ところでこのWSCriptを使った場合、普通にShell関数を実行するのに比べて、リソースの消費がとても大きくなるとか、速度がかなり遅くなるとかいうようなことはないでしょうか?
もしご存知でしたら教えてください。
WSCriptというのは初めてなもので・・・
どうぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
Console Applicationをタスクト...
-
Vba アプリケーションが立ち上...
-
VB6での二重起動(複数起動)の制...
-
イラストレーターCS4のシリアル...
-
INIファイルとAPP.CONFIGについて
-
VB.NETでフォームアクティブの...
-
VB.NETでMessageBoxを表示した...
-
vbで作成したアプリをサービス...
-
自分自身を更新するプログラム
-
MFCアプリケーションでの終了コ...
-
外字文字の登録
-
VBSでのSendKeysでの画面の最小化
-
Accessフォームからの外部アプ...
-
対象のアプリケーションが終了...
-
pc版フォートナイトをやりたい...
-
Macターミナルで実行中のプログ...
-
C# シリアル通信でデータ受信...
-
バックグラウンドのプロセスの...
-
家電製品の電力周波数を変える機械
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WSH(VBScript)でアプリケーショ...
-
フレームワーク「4.8.1」で、[S...
-
VB.NETでMessageBoxを表示した...
-
コンソールアプリケーションの...
-
SetWindowPosについて
-
pccNTmon.exeとntrtscan.exeの違い
-
Accessフォームからの外部アプ...
-
初回接続の遅い原因について
-
Console Applicationをタスクト...
-
VBSでのSendKeysでの画面の最小化
-
Vba アプリケーションが立ち上...
-
イラストレーターCS4のシリアル...
-
MFCアプリケーションでの終了コ...
-
実行時のコマンドプロンプトを...
-
C#でGUI・CUIの判断する仕方を...
-
アプリケーションをVBS(WSH?)で...
-
OSによるWinExecの動...
-
vb6で異なるのプロジェクト間で...
-
SYSTEM権限でプロセス機動
-
VB.NETでフォームアクティブの...
おすすめ情報