简单问题,如何实现Console程序中"Press any Key to continue..." ?(50分)

  • 主题发起人 主题发起人 HappyEveryDayR
  • 开始时间 开始时间
H

HappyEveryDayR

Unregistered / Unconfirmed
GUEST, unregistred user!
最近,在Delphi环境下写了一个Dos控制台程序,代码如下:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
c: char;
begin
Writeln('Hello World!');
Write('Press any Key to continue...');
Readln;
end.
其中,想实现按任何意键后,返回Windows,并结束Dos程序的运行。
最后一行,Readln经过测试,发现它随可以直接读入用户的回车输入,但对于其它字符必须
要输入字符并按回车后,才能结束程序运行。而且你输入的字符会显示在屏幕上。
而在CB中有一个现成的函数getch(),它可以读入用户从键盘输入的任何字符,不必按回车,
且不向屏幕回显,十分不错。
请问哪位高手可以指点一下,实现该功能,多谢!
 
看看getch()的源代码不就知道了?
 
1.getch()在CB中是通过conio.h头文件提供给程序员调用的,它的实现是经过编译后放在Lib
中,在连接时自动挂接的,不能看到原码!
2.tseug这位仁兄,你提到Read语句,然后怎么样,我看不懂你的意思,请明示!
 
下面的一段代码仅仅用来等待键盘事件:

uses windows;

VAR
h:THandle;
buf:INPUT_RECORD;
n:DWORD;

h:=GetStdHandle(STD_INPUT_HANDLE);
while true do
begin
ReadConsoleInput(h,buf,1,n);
if (n=1) and (buf.EventType=KEY_EVENT) then
break;
Sleep(100);
end;

//注意 h 不必CloseHandle
 
补充,
1、仅用于console程序
2、ctrl、shift之类的按键都有效
 
感谢Pipi,不过我对您代码中这句API--ReadConsoleInput(...)中所用到的参数用途不是
很清楚,我看了MSDN,不过不是很明白,能否给于更详细的解释。另外,如何在Console
中接受命令行参数呢?谢!
 
ReadConsoleInput是读取系统给console程序的说有事件,鼠标、键盘、resize等
所以要判断一下是键盘事件
命令行参数:
ParamStr(0) 是exe自己
ParamStr(1) 是第一个参数,
ParamStr(2) 是第2个参数,……
另外,CmdLine变量是整个、未分割的命令行
 
[:)]谢谢,但是,我通过看MSDN,对ReadConsoleInput(h,buf,1,n);您这句中函数第三个和最后
一个参数不知道是什么意思,它们做什么用呢?
 
1表示buf只能放1个记录
n返回放入的记录数
 
问题解决,散分啦!
 
奇怪,难道我说的不对?一分也没有?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
598
import
I
后退
顶部