Prog1在得到UserName和Password之后
ShellExec('Prog2 '+UserName+' '+Password);
Prog2通过命令行参数来获得UserName 和 Password.

解决方案 »

  1.   

    sendmessage,postmessage,临时文件……
      

  2.   

    可以利用WM_COPYDATA消息来进行不同程序间的参数传递。
      

  3.   

    我有个例子可以看看:
    SendData程序向GetData程序发送消息,并传递edit1中的字符串;GetData在收到消息后,把SendData发送的字符串接受下来,并显示在相应的edit1中。
    SendData程序: 
    ……varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);vards: TCopyDataStruct;hd: THandle;beginds.cbData := Length (Edit1.Text) + 1;GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存StrCopy (ds.lpData, PChar (Edit1.Text));Hd := FindWindow (nil, 'Form2'); // 获得接受窗口的句柄if Hd <> 0 thenSendMessage (Hd, WM_COPYDATA, Handle,Cardinal(@ds)) // 发送WM_COPYDATA消息elseShowMessage ('目标窗口没找到!');FreeMem (ds.lpData); //释放资源end;GetData程序: 
     TForm2 = class(TForm)Edit1: TEdit;private{ Private declarations }publicprocedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;{ Public declarations }end;varForm2: TForm2;implementationprocedure TForm2.Mymessage(var t:TWmCopyData);beginEdit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。end;
      

  4.   

    还有WM_COPYDATA消息!procedure TForm1.Button1Click(Sender: Tobject);vards: TCopyDataStruct;hd: Thandle;beginds.cbData := Length (Edit1.Text) + 1;GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存StrCopy (ds.lpData, Pchar (Edit1.Text));Hd := FindWindow (nil, 'Form2'); // 获得接受窗口的句柄if Hd <> 0 thenSendMessage (Hd, WM_COPYDATA, Handle,Cardinal(@ds)) // 发送WM_COPYDATA消息elseShowMessage ('目标窗口没找到!');FreeMem (ds.lpData); //释放资源end;GetData程序: 
     TForm2 = class(Tform)Edit1: Tedit;private{ Private declarations }publicprocedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;{ Public declarations }end;varForm2: TForm2;implementationprocedure TForm2.Mymessage(var t:TWmCopyData);beginEdit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。end;
      

  5.   

    to debussy(debussy)
    怎么使用命令行参数?能不能再详细一点。to njbudong(午夜游民) & ehom(?!)
    不是在两个Form间传递参数,而是两个程序。传递参数的时候,第二个程序根本没有开始运行。如果按照两位的方法,只会出现“目标窗口没有找到”的提示。
      

  6.   

    不会的,用试了一下没有问题的啊。
    你可以单独做两个程序啊,AppTitle='Form1,2'
      

  7.   

    to njbudong(午夜游民)
    程序2根本没有开始运行,Hd  :=  FindWindow  (nil,  'Form2');  的返回值只可能是nil。程序2是否运行取决于接受到的参数。
      

  8.   

    "怎么使用命令行参数?"就是说如同直接运行
    temp.exe a b c
    然后在启动后的程序后用
    ParamStr(1)取得a
    ParamStr(2)取得b
    ……
      

  9.   

    通过ParamCount、ParamStr传递,最简单
      

  10.   

    谢谢!成功了!结帐!
    程序1:
    tempStr='123.exe '+edit1.text;
    winexec(pchar(tempStr),SW_SHOWNORMAL);
    程序2:
    .....FromCreate(....)
    begin
    if paramstr(1)<>password then Application.terminate;
    .....
    end.