您可以編寫一個函數來檢測是否按下了鍵,檢查console input buffer
。
每個控制檯有 包含輸入事件 記錄的隊列的輸入緩衝器。當控制檯的窗口有 鍵盤焦點,控制檯格式 每個輸入事件(如單個 按鍵,鼠標的移動,或 鼠標鍵點擊)作爲輸入 記錄,它在控制檯的地方輸入緩衝區爲 。
首先,你必須調用GetNumberOfConsoleInputEvents函數來獲取事件的數量,然後使用PeekConsoleInput功能檢索事件,並檢查事件是KEY_EVENT
最後沖洗使用FlushConsoleInputBuffer控制檯輸入緩衝區。
檢查該樣本
function KeyPressed:Boolean;
var
lpNumberOfEvents : DWORD;
lpBuffer : TInputRecord;
lpNumberOfEventsRead : DWORD;
nStdHandle : THandle;
begin
Result:=false;
//get the console handle
nStdHandle := GetStdHandle(STD_INPUT_HANDLE);
lpNumberOfEvents:=0;
//get the number of events
GetNumberOfConsoleInputEvents(nStdHandle,lpNumberOfEvents);
if lpNumberOfEvents<> 0 then
begin
//retrieve the event
PeekConsoleInput(nStdHandle,lpBuffer,1,lpNumberOfEventsRead);
if lpNumberOfEventsRead <> 0 then
begin
if lpBuffer.EventType = KEY_EVENT then //is a Keyboard event?
begin
if lpBuffer.Event.KeyEvent.bKeyDown then //the key was pressed?
Result:=true
else
FlushConsoleInputBuffer(nStdHandle); //flush the buffer
end
else
FlushConsoleInputBuffer(nStdHandle);//flush the buffer
end;
end;
end;
你確定你想要一個繁忙的循環?爲什麼不按ctrl + break打破? – 2011-04-30 22:41:45