导航

心动吧DELPHI网络书

自发研究:须要多维思想而且要想不可能为可能的人才能做到

« 12.多线程同步之 Semaphore (信号对象) 13多线程同步之 Event (事件对象) »

[原创]让exe支持命令运行的delphi语法

原创:心动吧明生KISS

转换请注明:http://www.abcxd.com

  很多程序有的时候需要在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;

 

看过上面的函数得知。。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;



第二种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;

 

 

原创文章如转载,请注明:转载自心动吧DELPHI网络书 [ http://www.abcxd.com/delphi/ ]

本文链接地址:http://www.abcxd.com/delphi/abcxddelphi/DELPHIHACKER/354/

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索内容

日历

Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved