程序间参数传递 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
功能:
第一次執行的時候…會開啟project1.exe
第二次執行的時候…不開啟project1.exe(因程式已執行)…但会将參數會丟給已執行的project1.exe
第3次執行的時候…不開啟project1.exe(因程式已執行)…但会将參數會丟給已執行的project1.exe
...
...
防止多次运行部分参考:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33954
并且在写这篇文章的过程中得到了william前辈的指导,在此表示感谢!
[公共单元文件]
unit Unlib;
interface
type
par = record
str1 : string[255];
str2 : String[255];
Str3 : string[255];
end ;
implementation
end. [工程文件]
program Project1; uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Windows,
Messages,
Dialogs,
unlib in 'unlib.pas'; const
appname='myname';
var
myhandle:hwnd;
RexData : ^COPYDATASTRUCT ;
ppar:^par;
{$R *.res} begin
myhandle:=findwindow(appname,nil);
begin
GetMem(RexData,SizeOf(COPYDATASTRUCT));
GetMem(ppar,Sizeof(par));
with ppar^ do
begin
str1 :=ParamStr(1);
str2 :=ParamStr(2);
Str3 :=ParamStr(3);
end; with RexData^ do
begin
dwData := myhandle ;
cbData := Sizeof(par) ;
lpData := ppar;
end;
if myhandle>0 then SendMessage(myhandle,WM_COPYDATA,0,LONGINT(REXdATA));
FreeMem(RexData);
FreeMem(ppar);
if myhandle>0 then exit;
end ;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end. [单元文件]
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,unlib;
const
appname='myname';
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
private
{ Private declarations }
public procedure createparams(var params:tcreateparams);override;
procedure restorerequest(var msg:TWMCopyData);message WM_CopyData; { Public declarations }
end; var
Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.createparams(var params:tcreateparams);
begin
inherited createparams(params);
params.WinClassName:=appname;
end; procedure TForm1.restorerequest(var msg:TWMCopyData);
var
RexData :TCopyDataStruct ;
ppar: ^par ;
begin
if msg.CopyDataStruct<> nil then
begin
RexData := msg.CopyDataStruct^ ;
ppar:= RexData.lpData ; if ppar^.str1='' then
memo1.Lines.Add('Not Parameter')
else
memo1.Lines.Add (ppar^.str1); if ppar^.str2='' then
memo2.Lines.Add('Not Parameter')
else
memo2.Lines.Add (ppar^.str2); if ppar^.str3='' then
memo3.Lines.Add('Not Parameter')
else
memo3.Lines.Add (ppar^.str3);
end ; end; end. 使用:
先运行程序
1、拖动任意文件让其传递参数显示效果
2、dos 下传递参数效果
c:\>Project1 a
c:\>Project1 a b c
附加檔案:36089_sos.rar
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |