Мониторинг консольной программы - VB

Узнай цену своей работы

Формулировка задачи:

Есть консольное приложение которое постоянно что-то выводит на экран Как считать все содержимое окна в литерную переменную ?

Решение задачи: «Мониторинг консольной программы»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
  4. Private Declare Function PeekNamedPipe Lib "kernel32" (ByVal hNamedPipe As Long, lpBuffer As Any, ByVal nBufferSize As Long, lpBytesRead As Long, lpTotalBytesAvail As Long, lpBytesLeftThisMessage As Any) As Long
  5. Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
  6. Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
  7. Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
  8. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  9. Private Type SECURITY_ATTRIBUTES
  10.     nLength As Long
  11.     lpSecurityDescriptor As Long
  12.     bInheritHandle As Long
  13. End Type
  14. Private Type PROCESS_INFORMATION
  15.     hProcess As Long
  16.     hThread As Long
  17.     dwProcessId As Long
  18.     dwThreadId As Long
  19. End Type
  20. Private Type STARTUPINFO
  21.     cb As Long
  22.     lpReserved As Long
  23.     lpDesktop As Long
  24.     lpTitle As Long
  25.     dwX As Long
  26.     dwY As Long
  27.     dwXSize As Long
  28.     dwYSize As Long
  29.     dwXCountChars As Long
  30.     dwYCountChars As Long
  31.     dwFillAttribute As Long
  32.     dwFlags As Long
  33.     wShowWindow As Integer
  34.     cbReserved2 As Integer
  35.     lpReserved2 As Byte
  36.     hStdInput As Long
  37.     hStdOutput As Long
  38.     hStdError As Long
  39. End Type
  40. Private Const STARTF_USESHOWWINDOW = &H1
  41. Private Const STARTF_USESTDHANDLES = &H100
  42. Private Const SW_HIDE = 0
  43. Private Const EM_SETSEL = &HB1
  44. Private Const EM_REPLACESEL = &HC2
  45.  
  46. Dim hRead As Long, hWrite As Long, info As PROCESS_INFORMATION
  47.  
  48. Private Function Read() As String
  49.     Dim buf As String, count As Long, tmp As Byte
  50.     Do
  51.         PeekNamedPipe hRead, tmp, 1, count, 0, ByVal 0
  52.         If count = 0 Then Exit Do
  53.         buf = Space(1024)
  54.         If ReadFile(hRead, ByVal buf, 1024, count, ByVal 0&) Then
  55.             Read = Read & Left(buf, count)
  56.         Else
  57.             Exit Do
  58.         End If
  59.     Loop
  60. End Function
  61. Private Sub InitConsole(CommandLine As String)
  62.     Dim attr As SECURITY_ATTRIBUTES
  63.     Dim sui As STARTUPINFO
  64.    
  65.     attr.nLength = Len(attr)
  66.     attr.lpSecurityDescriptor = 0
  67.     attr.bInheritHandle = True
  68.    
  69.     If CreatePipe(hRead, hWrite, attr, 0) <> 0 Then
  70.         sui.cb = Len(sui)
  71.         GetStartupInfo sui
  72.         sui.hStdOutput = hWrite
  73.         sui.hStdError = hWrite
  74.         sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
  75.         sui.wShowWindow = SW_HIDE
  76.         If CreateProcess(vbNullString, CommandLine, ByVal 0, ByVal 0, True, 0, ByVal 0, vbNullString, sui, info) = 0 Then
  77.             CloseHandle hRead: CloseHandle hWrite
  78.             MsgBox "error": End
  79.         End If
  80.     End If
  81. End Sub
  82. Private Sub DeinitConsole()
  83.     CloseHandle hRead: CloseHandle hWrite: CloseHandle info.hThread: CloseHandle info.hProcess
  84. End Sub
  85.  
  86. Private Sub cmdRead_Click()
  87.     txtConsole.Text = Read
  88. End Sub
  89.  
  90. Private Sub Form_Load()
  91.     InitConsole "C:\Windows\System32\Cmd.exe"
  92. End Sub
  93. Private Sub Form_Unload(Cancel As Integer)
  94.     DeinitConsole
  95. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы