怎样做一个带参数的EXE文件(100分)

  • 主题发起人 主题发起人 logwin
  • 开始时间 开始时间
L

logwin

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何用DELPHI做一个带参数输入的EXE程序。[:(]
 
ParamCount//参数的个数
ParamStr(0)//就是程序的文件名
ParamStr(1)//第1个参数
ParamStr(n)//第n个参数
 
同意楼上andy263!
直接在程序中取出来,处理就可以了。早期的DOS程序也是类似的情况。
 
那参数的形式是 app.exe /n/s
还是app.exe -n -s
还是可以app.exe -n /s
????
 
实际是 /n/s还是-n -s是由你规定的!你在程序中得到的是-n -s或/n/s,要你自己处理!
 
那么ParamCount 和ParamStr(0) 在程序那里声明?
 
实际上是已经声明好的,在程序中直接就可以用的。Paramstr数组的长度是ParamCount,
就是你打入命令的时候,后跟参数的个数。这里以空格为间隔符,比如:com ok ll -dfd
,那么Paramstr就是4;cmo kk dfd ---fdfd- //fdd/fd/ ,就是5 。
 
传的方式: app.exe user password
 
再补充一点,比如,假设外部命令是Com.exe :

com ok ll -dfd(后跟回车) ,则ParamCount=4 , Paramstr[0]='com' ,
Paramstr[1]='ok' ,Paramstr[2]='ll' ,Paramstr[3]='-dfd' 。

com lll jjj ddd =9869(后跟回车),则ParamCount=5 , Paramstr[0]='com' ,
Paramstr[1]='lll' ,Paramstr[2]='jjj' ,Paramstr[3]='ddd' ,Paramstr[4]='=9869'
 
就是说,操作系统传给我们程序的所谓‘参数’,他是按照什么标准呢?有几个参数?分别是什么?
那就是每个以空格分开的(可以多个空格),单个‘单词’,每一个就是一个‘参数’。
操作系统是按照这个标准的!我们从ParamCount和Paramstr就能知道用户输入了什么,然后分析处理。
这也就是为什么有的程序参数要求前缀-,有的要求/,其实是程序规定的。比如 Xcopy /f
程序得到的参数实际是'/f',然后他要解析,去掉'/'一看,是'f',就按照预先定义好的做处理。
其实有没有/或-或其他什么是不必要的,只是程序设计的时候,人为规定的。
 
这个小伙理解得很透彻!呵呵
 
logwin兄,问题搞定没?没有的话我做个简单例子给你看好了。如何?
 
第一楼就说了答案了。
 
发现Delphi7中的ParamCount有点问题它一直就是一。
不信可以试试!!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2473543
我改了一个:
GetParamList输入一个TStrings(如TStringList),分解的结果在其中,返回参数的个数。
--------------------------------------------------------------------------------
function GetParamList(list: TStrings):integer;
var
P: PChar;
S: string;

function GetParamStr(P: PChar; var Param: string): PChar;
var
i, Len: Integer;
Start, S, Q: PChar;
begin
while True do
begin
while (P[0] <> #0) and (P[0] <= ' ') do
P := CharNext(P);
if (P[0] = '"') and (P[1] = '"') then Inc(P, 2) else Break;
end;
Len := 0;
Start := P;
while P[0] > ' ' do
begin
if P[0] = '"' then
begin
P := CharNext(P);
while (P[0] <> #0) and (P[0] <> '"') do
begin
Q := CharNext(P);
Inc(Len, Q - P);
P := Q;
end;
if P[0] <> #0 then
P := CharNext(P);
end
else
begin
Q := CharNext(P);
Inc(Len, Q - P);
P := Q;
end;
end;

SetLength(Param, Len);

P := Start;
S := Pointer(Param);
i := 0;
while P[0] > ' ' do
begin
if P[0] = '"' then
begin
P := CharNext(P);
while (P[0] <> #0) and (P[0] <> '"') do
begin
Q := CharNext(P);
while P < Q do
begin
S := P^;
Inc(P);
Inc(i);
end;
end;
if P[0] <> #0 then P := CharNext(P);
end
else
begin
Q := CharNext(P);
while P < Q do
begin
S := P^;
Inc(P);
Inc(i);
end;
end;
end;

Result := P;
end;
begin
list.Clear;
Result := 0;

P := CmdLine;
while True do
begin
P := GetParamStr(P, S);
if S = '' then Break;

list.Add(S);
Inc(Result);
end;
end;

// 例示程序,将参数表放到Memo1里,将参数个数显示到Caption
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption := IntToStr(GetParamList(Memo1.Lines));
end;
 
果然如此!
 
后退
顶部