我在 delphi 7 中创建了一个控制台应用程序,它应该在您按下 Enter 按钮后显示消息:
begin
writeln ('Press ENTER to continue');
readln;
writeln ('blablabla');
writeln ('blablabla');
end;
问题是用户可以按任意按钮继续,这就是问题所在。我只希望当用户按下键盘的回车按钮时程序才能继续。除此之外,我需要它在一段时间(例如 5 秒)后自动继续,而无需用户输入。
如何制作一个控制台应用程序,等待用户按 Enter 键一段时间,但如果用户不按 Enter 键,则自动继续?
您可以尝试此代码(改编自我们的SynCommons.pas
单位,在我们的范围内mORMot框架):
procedure ConsoleWaitForEnterKey(TimeOut: integer);
function KeyPressed(ExpectedKey: Word):Boolean;
var lpNumberOfEvents: DWORD;
lpBuffer: TInputRecord;
lpNumberOfEventsRead : DWORD;
nStdHandle: THandle;
begin
result := false;
nStdHandle := GetStdHandle(STD_INPUT_HANDLE);
lpNumberOfEvents := 0;
GetNumberOfConsoleInputEvents(nStdHandle,lpNumberOfEvents);
if lpNumberOfEvents<>0 then begin
PeekConsoleInput(nStdHandle,lpBuffer,1,lpNumberOfEventsRead);
if lpNumberOfEventsRead<>0 then
if lpBuffer.EventType=KEY_EVENT then
if lpBuffer.Event.KeyEvent.bKeyDown and
((ExpectedKey=0) or (lpBuffer.Event.KeyEvent.wVirtualKeyCode=ExpectedKey)) then
result := true else
FlushConsoleInputBuffer(nStdHandle) else
FlushConsoleInputBuffer(nStdHandle);
end;
end;
var Stop: cardinal;
begin
Stop := GetTickCount+TimeOut*1000;
while (not KeyPressed(VK_RETURN)) and (GetTickCount<Stop) do
Sleep(50); // check every 50 ms
end;
请注意,嵌入的版本mORMot确实允许调用TThread.Synchronize()
方法并在必要时处理 GDI 消息循环。我希望这个程序正好适合您的需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)