gpt4 book ai didi

delphi - 如何让控制台应用程序等待 "Enter"键,但在一段时间后自动继续?

转载 作者:行者123 更新时间:2023-12-03 14:42:48 25 4
gpt4 key购买 nike

我在delphi 7中创建了一个控制台应用程序,它应该在您按下回车按钮后显示消息:

begin
writeln ('Press ENTER to continue');
readln;
writeln ('blablabla');
writeln ('blablabla');
end;

问题是用户可以按任意按钮继续,这就是问题所在。我只希望当用户按下键盘的回车按钮时程序才能继续。除此之外,我需要它在一段时间后自动继续,例如 5 秒,无需用户输入。

如何制作一个控制台应用程序,等待用户按 Enter 键一段时间,但如果用户不按 Enter 键,则自动继续?

最佳答案

您可以尝试以下代码(改编 self 们的 mORMot 框架内的 SynCommons.pas 单元):

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 消息循环。我希望这个过程正好适合您的需要。

关于delphi - 如何让控制台应用程序等待 "Enter"键,但在一段时间后自动继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com