連携 リダイレクトを使わず直接コマンドの実行結果を取得する
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
Function CMDcommandResultGet(strCommand As String) As String '******************************************************** 'リダイレクトを使わず直接コマンドの実行結果を取得する① '******************************************************** 'Windows Scripting Host(WSH)-WshShell-Execメソッド 'Functionで全ての値を取得(StdOut/stderr) Dim WshShell As Object Dim oExec As Object Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("%ComSpec% /c " & strCommand) 'Exec メソッド If Not oExec.StdOut.AtEndOfStream Then 'StdOut プロパティ'AtEndOfStream プロパティ CMDcommandResultGet = oExec.StdOut.ReadAll 'ReadAll メソッド Exit Function End If If Not oExec.stderr.AtEndOfStream Then 'stderr プロパティ'AtEndOfStream プロパティ CMDcommandResultGet = oExec.stderr.ReadAll 'ReadAll メソッド Exit Function End If End Function Sub CommandResultGet(ByVal strCommand As String, ByRef blnERR As Boolean, _ ByRef strRead As String) '******************************************************** 'リダイレクトを使わず直接コマンドの実行結果を取得する② '******************************************************** 'Windows Scripting Host(WSH)-WshShell-Execメソッド 'Call-Subでエラー値も取得(StdOut/stderr) 'strCommandはコマンド引数 'blnERRはエラー値で無い場合FALSEを返す 'strReadは値を返す Dim WshShell As Object Dim oExec As Object Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("%ComSpec% /c " & strCommand) 'Exec メソッド If Not oExec.StdOut.AtEndOfStream Then 'StdOut プロパティ'AtEndOfStream プロパティ strRead = oExec.StdOut.ReadAll 'ReadAll メソッド blnERR = False '返値 Exit Sub End If If Not oExec.stderr.AtEndOfStream Then 'stderr プロパティ'AtEndOfStream プロパティ strRead = oExec.stderr.ReadAll 'ReadAll メソッド blnERR = True '返値 Exit Sub End If End Sub Private Sub test1() '① Dim strCommand As String strCommand = "ver" MsgBox CMDcommandResultGet(strCommand) Debug.Print CMDcommandResultGet(strCommand) End Sub Private Sub test2() '② Dim blnERR As Boolean Dim strRead As String Dim strCommand As String strCommand = "ver" Call CommandResultGet(strCommand, blnERR, strRead) If blnERR = False Then MsgBox strRead, vbInformation, "OK" Else MsgBox strRead, vbCritical, "ERROR" End If Debug.Print strRead End Sub |
|||||
|