很多程序有的时候需要在dos命令下运行。。但是如果不带命令而直接运行的话。又会有很多问题。所以今天这一个就是讲求,如何让delphi生成的EXE也能支持命令运行,其实所有生成出来的exe都可以支持命令的。只是我们并没有接收外部传进来的值。所以就无处判断。。而现在这一个就是来介绍他的方法。先看一下他的函数写法
演示图部分代码:
Paramstr函数 单元文件名:system function ParamStr(Index: Integer): string;     
{$IFDEF MSWINDOWS}  
var  
  P: PChar;   
  Buffer: array[0..260] of Char;   
begin  
  Result := '';   
  if Index = 0 then      //判断如果传递过来的值是0的话那么就返回一个路径   
    SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer)))   
  else  
  begin  
    P := GetCommandLine;   //指向当前命令行缓冲区的一个指针   
    while True do  
    begin  
      P := GetParamStr(P, Result);  //用GetParamStr函数接收值   
      if (Index = 0) or (Result = '') then Break;   
      Dec(Index);   
    end;   
  end;   
{$ENDIF}   
{$IFDEF LINUX}  
begin  
  if Index < ArgCount then  
    Result := PCharArray(ArgValues^)[Index]  //返回   
  else  
    Result := '';   
{$ENDIF}   
end;  function ParamStr(Index: Integer): string;  
{$IFDEF MSWINDOWS}
var
  P: PChar;
  Buffer: array[0..260] of Char;
begin
  Result := '';
  if Index = 0 then      //判断如果传递过来的值是0的话那么就返回一个路径
    SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer)))
  else
  begin
    P := GetCommandLine;   //指向当前命令行缓冲区的一个指针
    while True do
    begin
      P := GetParamStr(P, Result);  //用GetParamStr函数接收值
      if (Index = 0) or (Result = '') then Break;
      Dec(Index);
    end;
  end;
{$ENDIF}
{$IFDEF LINUX}
begin
  if Index < ArgCount then
    Result := PCharArray(ArgValues^)[Index]  //返回
  else
    Result := '';
{$ENDIF}
end; 看过上面的函数得知。。paramstr函数是通过GetParamStr来获得值的.那我们也可以直接调用GetParamStr来获取更方便。不过现在讲的是paramstr,呆会再讲那一个...好了。现在我们应该怎么写呢。步骤1:在窗口create事件中写入一句即可:paramstr(1)    1表示接收值,0返回当前路exe路径源码大概 
procedure TForm1.FormCreate(Sender: TObject);   
begin  
 abcxddos := ParamStr(2); //判断传送过来的值   
  
 if abcxddos<>'' then  
   showmessage(abcxddos)  //返回值   
 else  
   showmessage(ParamStr(0)); //返回路径   
end;  procedure TForm1.FormCreate(Sender: TObject);
begin
 abcxddos := ParamStr(2); //判断传送过来的值 if abcxddos<>'' then
   showmessage(abcxddos)  //返回值
 else
   showmessage(ParamStr(0)); //返回路径
end;第二种getoaramstr  (网络收集) 
function GetParamStrW(P:PWChar;var Param:WideString):PWChar;   
var  
  Len:Integer;   
  Buffer:array[0..4095] of WChar;   
begin  
  while True do  
  begin  
    while (P[0]<>#0) and (P[0]<=' ') do Inc(P);   
    if (P[0]='"') and (P[1]='"') then Inc(P,2) else Break;   
  end;   
  Len:=0;   
  while (P[0]>' ') and (Len   begin  
    if P[0]='"' then  
    begin  
      Inc(P);   
      while (P[0]<>#0) and (P[0]<>'"') do  
      begin  
        Buffer[Len]:=P[0];   
        Inc(Len);   
        Inc(P);   
      end;   
      if P[0]<>#0 then Inc(P);   
    end  
    else  
    begin  
      Buffer[Len]:=P[0];   
      Inc(Len);   
      Inc(P);   
    end;   
  end;   
  SetString(Param, Buffer, Len);   
  Result:=P;   
end;   
  
function ParamStrW(Index: Integer): WideString;   
var  
  P:PWChar;   
  Buffer:array[0..MAX_PATH] of WChar;   
begin  
  if Index=0 then  
    SetString(Result,Buffer,GetModuleFileNameW(0,Buffer,SizeOf(Buffer)))   
  else  
  begin  
    P:=GetCommandLineW;   
    Result:='';   
    while True do  
    begin  
      P:=GetParamStrW(P,Result);   
      if (Index = 0) or (Result = '') then Break;   
      Dec(Index);   
    end;   
  end;   
end;