Делаю кодер/декодер OGG файлов, используемый внутри приложения. Хотелось бы видеть проценты. Пользую код из DOSOutputs:
- Код: Выделить всё
'Create the Pipe2
sa.nLength = Len(sa)
sa.bInheritHandle = 1&
sa.lpSecurityDescriptor = 0&
ret = CreatePipe(hReadPipe, hWritePipe, sa, 0)
If ret = 0 Then
'If an error occur during the Pipe creation exit
MsgBox "CreatePipe failed. Error: " & Err.LastDllError, vbCritical
Exit Function
End If
'Launch the command line application
start.cb = Len(start)
start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
'set the StdOutput and the StdError output to the same Write Pipe handle
start.hStdOutput = hWritePipe
start.hStdError = hWritePipe
'Execute the command
ret& = CreateProcessA(0&, mCommand, sa, sa, 1&, _
IDLE_PRIORITY_CLASS, 0&, 0&, start, proc)
If ret <> 1 Then
'if the command is not found ....
MsgBox "File or command not found", vbCritical
Exit Function
End If
'Now We can ... must close the hWritePipe
ret = CloseHandle(hWritePipe)
mOutputs = ""
'Read the ReadPipe handle
Do
strBuff = String(256, " ")
ret = ReadFile(hReadPipe, strBuff, Len(strBuff), lngBytesread, 0&)
mOutputs = mOutputs & Left(strBuff, lngBytesread)
'Send data to the object via ReceiveOutputs event
RaiseEvent ReceiveOutputs(Left(strBuff, lngBytesread))
'End If
Loop While ret <> 0
Для oggdec - всё ок, и проценты идут. А вот для oggenc всё зависает на ReadFile пока программа не завершится, а потом уже поступают все данные. Через PeekNamedPipe проверил, что в пайпе, действительно ничего нет, до завершения программы, однако если запускать в нормальной консоли - то там всё замечательно и проценты бегут. В чём может быть проблема? Почему я не могу считать данные из пайпа во время её работы?