例如,假设我有一个控制台应用程序。如果我尝试从Windows资源管理器启动此控制台应用程序,则它将不起作用,只会关闭。但是,我可以从我的GUI应用程序或Windows命令控制台(cmd.exe)调用它,并传递一些开关(参数?)给它。
它确实能够正常工作。但是,控制台窗口会在程序退出后立即消失。如果您想让用户在关闭窗口之前有机会阅读您的控制台应用程序的输出,请在结束程序时使用"exit code 0"命令。
Readln;
或者
Writeln('Press Enter to exit.');
Readln;
如果您想在GUI应用程序中使用控制台窗口进行输出(或输入),可以尝试使用
AllocConsole
和
FreeConsole
函数。
命令行参数(例如
myapp.exe /OPEN "C:\some dir\file.txt" /THENEXIT
)可以在所有类型的Windows应用程序中使用,包括GUI应用程序和控制台应用程序。只需要使用
ParamCount
和
ParamStr
函数即可。
创建一个接受命令行参数的控制台应用程序的步骤:
1. 在Delphi IDE中选择文件/新建/控制台应用程序。
2. 然后编写相应的代码。
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils;
var
freq: integer;
begin
if ParamCount = 0 then
Writeln('No arguments passed.')
else if ParamCount >= 1 then
if SameText(ParamStr(1), '/msg') then
begin
if ParamCount = 1 then
Writeln('No message to display!')
else
MessageBox(0, PChar(ParamStr(2)), 'My Console Application',
MB_ICONINFORMATION);
end
else if SameText(ParamStr(1), '/beep') then
begin
freq := 400;
if ParamCount >= 2 then
if not TryStrToInt(ParamStr(2), freq) then
Writeln('Invalid frequency: ', ParamStr(2));
Windows.Beep(freq, 2000);
end;
end.
编译程序。然后打开命令处理器(CMD.EXE)并转到包含 Project1.exe
的目录。
然后尝试:
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>project1
No arguments passed.
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>project1 /msg
No message to display!
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>project1 /msg "This is a test."
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>project1 /beep
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>project1 /beep 600
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects>
如何传递三个参数
if ParamCount >= 1 then
begin
if SameText(ParamStr(1), '/CONVERT') then
begin
if ParamCount <= 2 then
begin
Writeln('Too few arguments!');
Exit;
end;
FileName1 := ParamStr(2);
FileName2 := ParamStr(3);
DoConvert(FileName1, FileName2);
end;
end;