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?)? Du kan redirecta stdout med > och |. Ja det kan du göra. Men det är lite kinkigt att göra i VB. Det var en väldigt trevligt lätt lösning på mitt avancerade problem. Tack så mycket!! Ja, det är på stdin (vilket innebär att det inte är någon höjdare för, säg, vb6-program).Övervaka DOS-program m.m.
Tack för svarSv: Övervaka DOS-program m.m.
ex.
dosrar ... > output.txt
dosrar ... | mitt_program.exe
dosrar:s output blir mitt_program:s input.Sv: Övervaka DOS-program m.m.
Genom att använda CreateProcess A>PI anropet så kan du ange StdInput , StdOutput och StdError:
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
Sv:Övervaka DOS-program m.m.
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.Sv: Övervaka DOS-program m.m.
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.