我现在遇到的情况是,一个程序在普通运行时可以以GUI方式运行;但也可以接受以参数的方式运行,并且在以参数方式启动时需要返回值,而且需要在CMD中运行时需要在CMD中输出。不知道这如何操作?例如:
1:一个程序Project1.exe中有一个Edit和一个Button,正常使用时就是启动程序,在Edit中填入一个数字,然后点击Button,进行乘2操作得到100。2:在另外一个程序Project2.exe中通过参数启动如ShellExecute(Self.Handle,‘Open’,'\Project1.exe','50',nil,SW_SHOWNORMAL),进行这个操作之后实现的效果就相当于在Edit中填入50,然后点击Button,但是这个时候需要返回值即100,而且Project2.exe需要得到这个返回值.3:如果是通过CMD启动程序,输入“Project1.exe 50”,需要在CMD中输出100.
现在需要的是上面三种清空都需要同时满足,请高手帮忙了。
1:一个程序Project1.exe中有一个Edit和一个Button,正常使用时就是启动程序,在Edit中填入一个数字,然后点击Button,进行乘2操作得到100。2:在另外一个程序Project2.exe中通过参数启动如ShellExecute(Self.Handle,‘Open’,'\Project1.exe','50',nil,SW_SHOWNORMAL),进行这个操作之后实现的效果就相当于在Edit中填入50,然后点击Button,但是这个时候需要返回值即100,而且Project2.exe需要得到这个返回值.3:如果是通过CMD启动程序,输入“Project1.exe 50”,需要在CMD中输出100.
现在需要的是上面三种清空都需要同时满足,请高手帮忙了。
如果没有参数则,还按照原先的过程来。
增加命令行参数就是使用控制台,否则使用窗口
program Project1;uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}var
str:string ;
len:DWORD;
begin
str := ParamStr( 1 );
if Length( str ) > 0 then
begin
AllocConsole();
WriteConsole( GetStdHandle(STD_OUTPUT_HANDLE) , PChar(str) , Length(str), len , nil );
end
else
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
end.
这个也有点古老了吧……
而且似乎不怎么简单
var
Parm1,Parm2: string;
begin
if trim(copy(self.MaskEdit1.Text,1,3))= '' then
begin
MessageBox(Handle,'请先输入收款机IP!','信息提示',MB_ICONWARNING+MB_OK);
exit;
end;
Parm1 := '-i ' + CutBlank(MaskEdit1.EditText) + ' put test1.dat';
Parm2 := '-i ' + CutBlank(MaskEdit1.EditText) + ' get return1.dat';
ShellExecute (Handle,'open','TFTP.exe',PChar(Parm1),nil,SW_MINIMIZE);
sleep(2000);
ShellExecute (Handle,'open','TFTP.exe',PChar(Parm2),nil,SW_MINIMIZE);
sleep(1000);
if FileComp('test1.dat','return1.dat')= true then
MessageBox(Handle,'测试成功!','信息提示',MB_ICONINFORMATION + MB_OK)
else
MessageBox(Handle,'测试失败!','信息提示',MB_ICONWARNING + MB_OK);
if fileexists('return1.dat') then
begin
FileSetAttr('return1.dat', 0);
deletefile('return1.dat');
end;
end;
还能在Project2.exe中创建一个全局互斥体 CreateMutex什么的。子进程就能够判断了。