Övervaka DOS-program m.m.
Jag skriver ett program som med hjälp av dosrar extraherar innehållet i ett arkiv. Denna del har jag inget problem med, utan det problem som uppstår är att jag vill ta reda på vilka filer som extraheras, vilket dosrar normalt skriver ut i konsollen. Finns det något sätt för mitt program att övervaka vad programmet skriver ut (agera stdout?)?
Tack för svar
Svara
Sv: Övervaka DOS-program m.m.
Du kan redirecta stdout med > och |.
ex.
dosrar ... > output.txt
dosrar ... | mitt_program.exe
dosrar:s output blir mitt_program:s input.
Svara
Sv: Övervaka DOS-program m.m.
Ja det kan du göra. Men det är lite kinkigt att göra i VB.
Genom att använda CreateProcess A>PI anropet så kan du ange StdInput , StdOutput och StdError:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" ( ByVal lpApplicationName As String , ByVal lpCommandLine As String , lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long , ByVal dwCreationFlags As Long , lpEnvironment As Any, ByVal lpCurrentDriectory As String , lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Public Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type |
Svara
Sv:Övervaka DOS-program m.m.
Det var en väldigt trevligt lätt lösning på mitt avancerade problem. Tack så mycket!!
En sak bara, hur läser jag av något som skickats till mitt program som "input"?
dosrar .. | test.exe
Detta startade bara test.exe en gång, utan någon data som ja hittar.
Svara
Sv: Övervaka DOS-program m.m.
Ja, det är på stdin (vilket innebär att det inte är någon höjdare för, säg, vb6-program).
Annars är det enkelt att göra via fil istället. I princip så borde man kunna bygga en "riktig pipe" också som i *x, men jag är tveksam till om windows fixar det.
Svara