本文整理自网络,侵删。
一、主要场景
a)主程序启动另外一个程序,并传递参数
b)主进程向一个已经运行中的程序传递参数
二、代码
1)调用程序:
var
HWND: DWORD;
ApplicationHWND:DWORD;
begin
HWND:=FindWindow('TFrmMain', '参数接收窗口');
ApplicationHWND:=GetWindow(HWND,GW_OWNER);
if HWND <> 0 then
begin
memo1.Lines.Add('参数接收程序已运行,向参数接收窗口投递消息。。。');
SendMessage(HWND,WM_TEST,0,0);
SetForegroundWindow(HWND);
SetActiveWindow(HWND);
ShowWindow(ApplicationHWND, SW_RESTORE);
// ShowWindow(HWND, SW_SHOWNORMAL); --此种方式会造成被调用的窗口无法最小化。。。
end
else
begin
memo1.Lines.Add('参数接收程序未运行,启动程序的同时传递参数。。。');
ShellExecute(Handle, 'Open', '..\ParamReceiver\ParamReceiver.exe', '参数1 参数2', nil, SW_SHOWNORMAL);
end;
end;
2) 接收程序:
获取被启动时传递过来的参数
var
receivedParam_0,receivedParam_1,receivedParam_2:string;
begin
receivedParam_0:=ParamStr(0);
receivedParam_1:=ParamStr(1);
receivedParam_2:=ParamStr(2);
Memo1.Lines.Add('程序被启动的同时收到参数。。。');
Memo1.Lines.Add('ParamStr(0)='+receivedParam_0);
Memo1.Lines.Add('ParamStr(1)='+receivedParam_1);
Memo1.Lines.Add('ParamStr(2)='+receivedParam_2);
end;
获取运行过程中传递过来的参数(消息响应)
begin Memo1.Lines.Add('窗口接收到定向投递过来的参数。。。');
Memo1.Lines.Add('具体的参数可通过内存映射文件实现进程间共享!!');
//Application.Restore;end;
三、运行结果
a)主程序启动另外一个程序,并传递参数
调用程序:
接收程序:
b)主进程向一个已经运行中的程序传递参数
调用程序:
接收程序:

PS: 1)一个进程调用另一个程序的主窗体: ShowWindow(Application.handle,SW_RESTORE) 2)一个进程调用另一个程序的子窗体: a)发送消息给被调用程序b)被调用程序收到消息后,使用form.show显示子窗体 注:1)防止出现ShowWindow函数调用之后出现:被调用窗口无法最小化的问题, 不可直接使用ShowWindow(Form.handle,---).2)在Delphi中API函数ShowWindow对delphi的form不太管用,一般都需要发送Application来恢复。3)使用内存映射文件进程间传递参数参见:http://www.cnblogs.com/edisonfeng/archive/2012/05/21/2511975.html
相关阅读 >>
Delphi winapi: getwindowthreadprocessid - 获取指定窗口的进程 id 或线程 id
Delphi xe tbitmap支持gif,成为具有jpg,gif,bmp,ico,gif五种显示功能的图片控件
winapi 字符及字符串函数(15): charnext、charprev
Delphi webservice 中采用 tsoapattachment 传输文件
更多相关阅读请进入《Delphi》频道 >>