這是一個奇怪的問題。我有一個pascal源代碼,它使用GotoXY函數來生成輸出,但現在我需要將輸出從控制檯重定向到一個文件。有任何想法嗎?pascal crt輸出重定向
0
A
回答
1
最後完成。
uses
Windows;
type
TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall;
var
AttachConsole: TAttachConsole;
mProcessID, Hcwnd: Cardinal;
procedure Attach;
begin
@AttachConsole := GetProcAddress(GetModuleHandle('kernel32.dll'), 'AttachConsole');
GetWindowThreadProcessId(FindWindow(nil,'C:\WINDOWS\system32\cmd.exe'),@mProcessID);
AttachConsole(mProcessID);
end;
function get(x, y: byte) : string;
const
SMB = 1;
var
chRead: Cardinal;
BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
lpCh : PChar;
Coord: _COORD;
begin
Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo (Hcwnd, BufInfo);
GetMem(lpCh,SMB);
Coord.X:=x;
Coord.Y:=y;
lpch := '';
ReadConsoleOutputCharacter(Hcwnd,lpCh,SMB,Coord,chRead);
get:=string(lpCh^);
end;
var x, y : integer;
buf : array[0..24] of string;
begin
for y := 0 to 24 do
begin
for x := 0 to 79 do
buf[y] := buf[y] + get(x,y);
end;
for y := 0 to 24 do
writeln(buf[y]);
end.
0
我假設你在談論Turbo Pascal函數,而不是C/C++提供的類似命名函數。 (雖然功能非常相似。)
不幸的是,你有幾件事情對你的工作 - 的Writeln
屏幕和文件版本不同,GotoXY
是一個保留字,等。我懷疑你最好的選擇是用一個內部指向基於全局標誌的屏幕或文件的通用函數調用來替換I / O調用。或者你可以插入單個的IF
語句來選擇在任何發生I/O的地方使用哪種邏輯。
相關問題
- 1. 重定向輸出
- 2. 重定向輸出不輸出任何
- 3. 重定向輸出到輸出文件
- 4. 重定向輸出蟒蛇
- 5. CreateProcess並重定向輸出
- 6. 重定向崩潰輸出
- 7. C++重定向輸出
- 8. GDB Windows輸出重定向
- 9. 如何重定向輸出?
- 10. 重定向讀取輸出
- 11. 的ProcessBuilder重定向輸出
- 12. 標準輸出重定向
- 13. 重定向bash輸出
- 14. 命令輸出重定向
- 15. 基本輸出重定向
- 16. 輸出重定向在C
- 17. 重定向標準輸出
- 18. 重定向測試輸出
- 19. Tamir.SharpSsh重定向輸出(Sha1)
- 20. 輸出流的重定向
- 21. 重定向wget頭輸出
- 22. 實時輸出重定向
- 23. TShark輸出重定向
- 24. 使輸出重定向
- 25. 重定向Trace.axd輸出
- 26. Bash - 輸出重定向
- 27. 重定向音頻輸出
- 28. QtScript輸出重定向
- 29. 重定向輸出猛砸
- 30. 從tr重定向輸出
是的,關於tp func。但是沒有GotoXY,格式化將會丟失。可以試試這個http://msdn.microsoft.com/en-us/library/windows/desktop/ms684969(v=vs.85).aspx函數。 – yuyoyuppe 2011-12-26 14:53:07
呃,在寫入文件時如何「格式化」?你有點受限於線性「演示」。 – 2011-12-26 18:50:20
我知道,但GotoXY在控制檯屏幕上刪除了這個限制。請參閱下面的解決方案 – yuyoyuppe 2011-12-27 18:33:39