Làm cách nào để đọc đầu ra ứng dụng bảng điều khiển khi nó đang chạy. Tôi bắt đầu ứng dụng giao diện điều khiển và muốn đọc kết quả đầu ra khi ứng dụng được in bằng giao diện điều khiển.Delphi 6 - đọc đầu ra của ứng dụng giao diện điều khiển trong khi đang chạy
Trả lời
Điều gì về điều này solution.
EDIT: liên kết dẫn đến giải pháp này (nhẹ refactored cho mức độ dễ đọc và để loại bỏ sử dụng with
):
// The example runs 'chkdsk.exe c:\' and displays the output to Memo1.
// Put a TMemo (Memo1) and a TButton (Button1) on your form. Put this
// code in the OnCLick event procedure for Button1:
procedure TForm1.RunDosInMemo(DosApp:String;AMemo:TMemo) ;
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes;
ReadPipe,
WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
Security.nlength := SizeOf(TSecurityAttributes) ;
Security.binherithandle := true;
Security.lpsecuritydescriptor := nil;
if Createpipe (ReadPipe, WritePipe, @Security, 0) then
begin
Buffer := AllocMem(ReadBuffer + 1) ;
FillChar(Start,Sizeof(Start),#0) ;
start.cb := SizeOf(start) ;
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,
PChar(DosApp),
@Security,
@Security,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
start,
ProcessInfo) then
begin
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT) ;
repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil) ;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer) ;
AMemo.Text := AMemo.text + String(Buffer) ;
until (BytesRead < ReadBuffer) ;
end;
FreeMem(Buffer) ;
CloseHandle(ProcessInfo.hProcess) ;
CloseHandle(ProcessInfo.hThread) ;
CloseHandle(ReadPipe) ;
CloseHandle(WritePipe) ;
end;
end;
procedure TForm1.Button1Click(Sender: TObject) ;
begin
RunDosInMemo('chkdsk.exe c:\', Memo1) ;
end;
Tôi thường sử dụng này chuyển đang FPC: http://www.stack.nl/~marcov/processdelphi.zip
Nó chứa một lớp để kiểm soát các chương trình bên ngoài (nó là lớp được sử dụng bởi Lazarus để gọi trình biên dịch cmdline và các chương trình khác).
Tài liệu ở đây, nhưng cổng delphi hơi cũ, vì vậy không phải tất cả các thuộc tính được ghi lại có thể tồn tại trong phiên bản trên.
Điều này có vẻ tuyệt vời! –
Trong các phiên bản FPC gần đây, một vài thủ tục đơn giản sửa một số kịch bản đơn giản nhất đã được thêm vào dưới dạng "RunCommand() –
Chỉ cần một bổ sung nhỏ để Marco câu trả lời, bằng cách sử dụng đơn vị TProcess được giải thích kỹ lưỡng here
Tôi tin rằng đây là cách dễ nhất để làm điều đó. Chúc may mắn!
- 1. Có đầu ra của một ứng dụng giao diện điều khiển trong Visual Studio thay vì giao diện điều khiển
- 2. powerhell và đầu ra ứng dụng giao diện điều khiển
- 3. Colorize stdout đầu ra cho Windows cmd.exe từ giao diện điều khiển C++ ứng dụng
- 4. Intellij: Đầu ra giao diện điều khiển tìm kiếm
- 5. System.Web.UI không có trong ứng dụng giao diện điều khiển?
- 6. Sự cố với đầu ra giao diện điều khiển C++
- 7. TBitmap.Create không làm việc trong giao diện điều khiển ứng dụng delphi
- 8. Cách thích hợp để xử lý đầu ra của giao diện điều khiển Verbose trong C#
- 9. Điều gì sẽ xảy ra nếu tôi không đóng System.Diagnostics.Process trong ứng dụng giao diện điều khiển C# của tôi?
- 10. Application.Current "null" trong giao diện điều khiển ứng dụng
- 11. Tại sao các luồng chạy serially trong ứng dụng giao diện điều khiển này?
- 12. Xuất bản ứng dụng giao diện điều khiển C#
- 13. Đọc mật khẩu từ giao diện điều khiển trong Scala
- 14. Truy cập vào giao diện điều khiển web trong khi chạy thử nghiệm junit trong ứng dụng Spring
- 15. thật sạch giết chết một ứng dụng giao diện điều khiển từ bên trong một nhóm các giao diện điều khiển ứng dụng
- 16. Đầu ra của bàn điều khiển trong ứng dụng GUI Qt?
- 17. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 18. cuối cùng dường như không thực hiện trong ứng dụng giao diện điều khiển C# khi đang sử dụng F5
- 19. Điều gì xảy ra khi tôi ngắt một ứng dụng giao diện điều khiển C# bằng Control-C?
- 20. chạy ứng dụng giao diện điều khiển trong C# với tham số
- 21. Delphi 6 ứng dụng chạy chậm trên windows 7
- 22. Phân tích cú pháp đầu vào bàn phím Java trong ứng dụng giao diện điều khiển
- 23. Biểu tượng ứng dụng giao diện điều khiển C#
- 24. Hiển thị đầu ra giao diện điều khiển NUnit trong CruiseControl.NET
- 25. Thoát khỏi giao diện điều khiển ray sau khi đầu ra dài
- 26. Tại sao hồ sơ VisualVM Profiler ứng dụng giao diện điều khiển Scala của tôi không?
- 27. Chạy một dịch vụ Windows như một ứng dụng giao diện điều khiển
- 28. Ứng dụng Giao diện điều khiển .Net không hiển thị Bảng điều khiển
- 29. Điều gì có thể khiến trình biên dịch không tạo ra đầu ra giao diện điều khiển
- 30. Không thể đọc lỗi JavaScript trong giao diện điều khiển Firebug trước khi tải lại trang
đề xuất tốt đẹp cho những người theo liên kết, nhưng một liên kết không phải là câu trả lời thực sự tốt, hãy xem: http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links -elsewhere-really-good-answers – Argalatyr
Tôi đã đăng mã từ liên kết. – Mick
@Mick: oops - trong khi bạn đang làm điều đó trong một câu trả lời mới, tôi đã chỉnh sửa cũ. Nếu ai đó cảm thấy chỉnh sửa của tôi nên được cuộn lại, hãy làm như vậy. – Argalatyr