很多程序有的时候需要在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;
演示图部分代码:
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;
解决方案 »
- delphi常识问题
- 求助:向各位大哥请教一个报表问题(fastreport 的 memo1 控件)
- 如何创建一个有消息队列的线程,就象进程的主线程一样,可以向它发消息.
- 哪个大哥知道,哪里有delphi 5 的下载??给个地址就好了一定给分!急用
- 一个技术问题
- 求救,急!急!急!BDE初始化出错
- 开发一个试卷生成系统是用delphi好还是用asp.net好
- 那位高手用过『流光IV』?
- 向各位大哥请教一个问题。Delphi5.0的例子csdemo每次运行都说数据库的username、password错误之类的提示,
- 做了一个登录模块,怎样写admin.cfg!
- 状态栏为什么常常不显示?
- !!!!关于string转换的问题
program Project1;uses
Windows;begin
if paramstr(1)='' then
MessageBox(0,pchar(paramstr(0)),'参数',0)
else
MessageBox(0,pchar(paramstr(1)),'参数',0);
end.下次再问多给点分,要不然我都没动力。