![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.3ベストアンサー
- 回答日時:
Shell関数より Processクラスで実行したほうが簡単に待てますよ
Dim oPro as Process
oPro = Process.Start("..\..\a.bat")
oPro.WaitForExit()
MessageBox.Show("Hello")
といった具合です
ご回答ありがとうございます。
上記のように実装したところ、簡単にできました!
Processクラスですか、知りませんでした。
Processクラスについてもう少し調べてみますね。
ありがとうございました!
No.5
- 回答日時:
参考URLの上の方にあると思いますが、Windows Scripting Host の略です。
http://msdn.microsoft.com/ja-jp/library/cc364455 …
Scriptの中で、色々な機能を実施する場合、お世話になるモノです。
試しに以下のコードを実行してみてください。
MsgBox "バッチを始めます。"
CreateObject("WScript.Shell").Run "C:\~\hoge.bat", 1, True
MsgBox "バッチが終わりました。"
バッチファイルのパスは実際の環境に合わせて記述してください。
No.4
- 回答日時:
すでに答え自体は出ていますが、ちょっと調べてみた感じだと、ほぼ
ANo.3のredfox63氏が書かれたProcessクラスを使った方法の一択っぽいですね。
ANo.1の方法については、リンク先に書かれてるのはVB6の記述方法で、
.NETで使うには多少コンバートしないといけません。
おまけに、Option Strict On の設定だと、WScript.Shellのメソッドを書こうとしても
遅延バインディングだと怒られてしまいます。
ANo.2で書かれているソースもVB6用で、Declareで書かれているAPIの定義について、
VB6とVB.NETでは変数のサイズも変更されていたりするので、引数の長さが違うので
変だよ、と怒られている感じです。
As Long を As Integer に変更すれば怒られなくなるかもしれませんが…
ともあれ、簡単に出来る手段が標準で与えられているので、それを使わない手はありませんね。
ちなみに、拡張子に関連付けての実行も、Processクラスを使用すれば出来ます。
これもAPI使うまでもありません。
ご回答ありがとうございます。
やはりそうなのですか。
私もがんばって他のやり方も試してみたものの
いろいろ怒られてしまって。
Processクラスでうまくいきました。
ありがとうございました。
No.2
- 回答日時:
下記のコードを実行してみてください。
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_QUERY_INFORMATION = &H400
Const STILL_ALIVE = &H103
Private Sub Command1_Click()
Dim pid As Long
pid = Shell("c:\a.bat", vbNormalFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid)
Do
Call GetExitCodeProcess(hProcess, ExitCode)
DoEvents
Loop While ExitCode = STILL_ALIVE
Call CloseHandle(hProcess)
MsgBox ("ok")
End Sub
ご回答ありがとうございます。
上記の通りにやってみましたところ、
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid)
の行にて以下のエラーとなりました。
PInvoke 関数 'WindowsApplication1!WindowsApplication1.Form1::OpenProcess' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一致していることを確認してください。
なんのことでしょうか。現在調査中です。
No.1
- 回答日時:
Shell関数ではなく、WSHのRun、Execメソッドを使ってみては?
http://msdn.microsoft.com/ja-jp/library/cc364421 …
http://msdn.microsoft.com/ja-jp/library/cc364356 …
ご回答ありがとうございます。
WSHとはいったいなんなのでしょうか?
このサイトに行き同様のコードを記述してみても
wscriptでコンパイルエラーとなってしまいます。
wscriptが何をImportsすればいいものなのか、調べても
わからない状況です。
もう少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
exeファイルを実行するとコマン...
-
ネットワーク名が見つかりません
-
エクセル フォルダの画像を画...
-
VBS実行時にコマンドプロンプト...
-
pythonスクリプトを管理者権限...
-
Excel VBAで複数のバッチファイ...
-
シェルで5分前の時間を取得したい
-
バッチファイルでクリップボー...
-
PDFファイルを開き、印刷し、閉...
-
バッチファイルの内容を表示さ...
-
VBA 既に開いているBookに継続...
-
Excel(エクセル) VBA プロシー...
-
ホームページのリンクからプロ...
-
gccのプロファイラで時間が取得...
-
Access の VBA 実行中に他の操...
-
Shell関数からバッチファイルを...
-
VBSでテキストファイルを作成
-
バッチファイルをダブルクリッ...
-
実行中のログをフォームのテキ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
「読み取りと実行」と「読み取...
-
[teraterm] waitコマンドで停止...
-
バッチファイルで以下のような...
-
バッチファイルの内容を表示さ...
-
PDFファイルを開き、印刷し、閉...
-
エクセル フォルダの画像を画...
-
これってパソコンの最適化が完...
-
バッチファイルが不正終了して...
-
ネットワーク名が見つかりません
-
シェルで5分前の時間を取得したい
-
pythonスクリプトを管理者権限...
-
Excel(エクセル) VBA プロシー...
-
複数のbatファイルを自動実行し...
-
Excel VBA ステップインが途中...
-
メッセージを他のPCに出したい
-
16進数の変換処理
-
VB.NETでのDOSコマンドを実行に...
おすすめ情報