掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
vbからDOSコマンドを実行し、結果を取得するには? (ID:87222)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンソール上の文字を読み取ることは可能なので、 かなりいいかげんなコードですが、成功、不成功だけなら何とか。。。 Option Explicit Private Declare Function AllocConsole Lib "kernel32" () As Long Private Declare Function FreeConsole Lib "kernel32" () As Long Private Declare Function ReadConsoleOutputCharacter Lib _ "kernel32" Alias "ReadConsoleOutputCharacterA" _ (ByVal hConsoleOutput As Long, ByVal lpCharacter As String, _ ByVal nLength As Long, ByVal CoordXY As Long, _ lpNumberOfCharsRead As Long) As Long Private Declare Function GetConsoleScreenBufferInfo Lib "kernel32" _ (ByVal hConsoleOutput As Long, lpConsoleScreenBufferInfo _ As CONSOLE_SCREEN_BUFFER_INFO) As Long Private Declare Function GetStdHandle Lib "kernel32" _ (ByVal nStdHandle As Long) As Long Private Type COORD x As Integer y As Integer End Type Private Type SMALL_RECT Left As Integer Top As Integer Right As Integer Bottom As Integer End Type Private Type CONSOLE_SCREEN_BUFFER_INFO dwSize As COORD dwCursorPosition As COORD wAttributes As Integer srWindow As SMALL_RECT dwMaximumWindowSize As COORD End Type Private Const STD_OUTPUT_HANDLE = -11& Private Sub Command1_Click() Dim ConsoleInfo As CONSOLE_SCREEN_BUFFER_INFO Dim ConsoleText As String Dim NrOfConsoleChars As Long Dim NrOfChrRead As Long Dim Start As Long Dim handle As Long On Error GoTo e AllocConsole 'コンソールを起動 handle = GetStdHandle(STD_OUTPUT_HANDLE) Shell Environ("ComSpec") & " /c copy test1.txt test2.txt" 'Shell Environ("ComSpec") & " /c dir c:\" handle = GetStdHandle(STD_OUTPUT_HANDLE) NrOfConsoleChars = 10000 'コンソール上の文字数 ConsoleText = String(NrOfConsoleChars, vbNullChar) GetConsoleScreenBufferInfo handle, ConsoleInfo Start = 0 DoEvents Do ReadConsoleOutputCharacter handle, ConsoleText, NrOfConsoleChars, _ Start, NrOfChrRead ConsoleText = Left(ConsoleText, NrOfChrRead) Text1.Text = Trim(ConsoleText) Loop While Len(Trim(Text1.Text)) < 10 '文字の長さは適当に e: FreeConsole 'コンソールを閉じる End Sub 全部の文字を読み取りたい場合は、Shell関数は非同期なんでLoopの代わりに十分の 時間を待ってConsoleTextを取得します。 それとまずいことに、改行が入りません。ただし、成功か不成功かを判断することは 可能かな。。。。。。。。。。。。(汗
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.