在很多程序中,都可以看到程序運行中,會有一個Dos窗口,實時顯示一些運行信息,這里就告訴大家是如何實現的,我們做個簡單的,其實對控制台的操作還有很多,有興趣的可以去查資料。
用到的API函數如下:
//創建控制台
AllocConsole;
//獲取控制台窗口
GetStdHandle;
//向控制台輸出信息
WriteConsole;
//釋放控制台
FreeConsole;
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } //控制台句柄 h_Console:THandle; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var p:PChar; num:Cardinal; begin //獲取控制台窗口 h_Console := GetStdHandle(STD_OUTPUT_HANDLE); p := PChar(Edit1.Text); //向控制台輸出信息 WriteConsole(h_Console,p,Length(Edit1.Text),num,nil); end; procedure TForm1.FormCreate(Sender: TObject); begin //創建控制台 AllocConsole; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if h_Console = 0 then Exit; //釋放控制台 FreeConsole; end; end.
參考:http://www.cnblogs.com/key-ok/p/3429861.html
------------------------------------------------------------------------------------
function PauseConsole(Prompt: PAnsiChar): boolean; var hStdIn, hStdOut: THandle; dwRd, dwWr, i: Cardinal; cBuf: array [0..128] of TInputRecord; begin result := false; hStdIn := GetStdHandle(STD_INPUT_HANDLE); hStdOut := GetStdHandle(STD_OUTPUT_HANDLE); if ((hStdIn <> 0) and (hStdOut <> 0)) then begin WriteFile(hStdOut,Prompt[0],lstrlenA(Prompt),dwWr,nil); while ReadConsoleInput(hStdIn,cBuf[0],128,dwRd) do begin for i := 0 to dwRd do begin if ((cBuf[i].EventType = KEY_EVENT) and (cBuf[i].Event.KeyEvent.bKeyDown)) then begin Result := true; exit; end; end; end; end; end; try PauseConsole('Press a key to continue...'); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end;
參考:http://www.cnblogs.com/key-ok/p/3380446.html