
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WSH(VBScript)でアプリケーショ...
-
SetWindowPosについて
-
アプリケーションをVBS(WSH?)で...
-
Console Applicationをタスクト...
-
タイトルバーのないアプリに二...
-
C#でGUI・CUIの判断する仕方を...
-
OSの”シャットダウン中”のステ...
-
VB.NETでMessageBoxを表示した...
-
FOM出版の公認テキスト&問題集...
-
VBSで2バイト文字の送り方の質...
-
イラストレーターCS4のシリアル...
-
2重起動の防止
-
初回接続の遅い原因について
-
外部アプリケーションの起動に...
-
Accessフォームからの外部アプ...
-
実行時のコマンドプロンプトを...
-
Access Violationについて
-
Macターミナルで実行中のプログ...
-
vba listviewにおけるtextのAli...
-
複数スレッドを動作させるのに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
コンソールアプリケーションの...
-
Vba アプリケーションが立ち上...
-
初回接続の遅い原因について
-
VBSでのSendKeysでの画面の最小化
-
イラストレーターCS4のシリアル...
-
pccNTmon.exeとntrtscan.exeの違い
-
VB.NETでMessageBoxを表示した...
-
VB6の強制終了について
-
OSによるWinExecの動...
-
C#でGUI・CUIの判断する仕方を...
-
vb6で異なるのプロジェクト間で...
-
対象のアプリケーションが終了...
-
WSH(VBScript)でアプリケーショ...
-
VB6での二重起動(複数起動)の制...
-
必須コンポーネントと起動条件...
-
アプリケーションをVBS(WSH?)で...
-
Windowsプログラムのビジー状態...
-
自分自身を更新するプログラム
-
httpd.pidって何ですか?
おすすめ情報