
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ランキング
-
コマンドプロンプトのエラーに...
-
「win11-23H2」を「win11-24H2...
-
VBscriptが起動しない?
-
[teraterm] waitコマンドで停止...
-
Windowsアプリケーションをメモ...
-
バッチファイルで以下のような...
-
Excel VBA ステップインが途中...
-
NASに移したBATファイルからセ...
-
「読み取りと実行」と「読み取...
-
WSH.Run の処理内容をテキスト...
-
三菱ラダーについて教えて下さい。
-
タイマーがうまく動かない
-
VbScriptからコマンドプロンプ...
-
Accessの最適化について DBengi...
-
エクセル フォルダの画像を画...
-
GDI+でやっとgng絵を出せたので...
-
COBOLのイニシャライズとバリュ...
-
バッチファイルの内容を表示さ...
-
【VB.NET】exeを実行すると「発...
-
VS2010の実行ディレクトリはど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
「win11-23H2」を「win11-24H2...
-
[teraterm] waitコマンドで停止...
-
「読み取りと実行」と「読み取...
-
これってパソコンの最適化が完...
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
複数のbatファイルを自動実行し...
-
VBscriptが起動しない?
-
ExcelのVBAが特定のPC上でのみ...
-
Excel(エクセル) VBA プロシー...
-
Windows System32 Security Hea...
-
PDFファイルを開き、印刷し、閉...
-
VBScriptでコマンドプロンプト...
-
batからexeを実行し戻り値を受...
-
Access の VBA 実行中に他の操...
-
Excel VBA ステップインが途中...
-
【VB.NET】exeを実行すると「発...
-
バッチファイルが不正終了して...
-
VBA 既に開いているBookに継続...
おすすめ情報