小弟我在两个delphi程序里使用如上方法来进行通讯。虽然可以通讯,但如果其中程序的界面最小化的话,他们之间的通讯就会中断。请大家有什么方法可以解决这个有关问题
我在两个delphi程序里使用如下方法来进行通讯。虽然可以通讯,但如果其中程序的界面最小化的话,他们之间的通讯就会中断。请大家有什么方法可以解决这个问题。
procedure TViForm.SendmsgToSticthForm(Msgstr: string);
var
ds: TCopyDataStruct;
hd: THandle;
//Inf: PSfyzxtInformation;
begin
//
ds.cbData := Length(Msgstr)+1;
GetMem(ds.lpData,ds.cbData); //为传递的数据区分配内存
StrCopy (ds.lpData,PChar(Msgstr));
Hd := FindWindow(nil,Pchar('Sticth')); // 获得接受窗口的句柄
if Hd <> 0 then
SendMessage(Hd,WM_COPYDATA, 0,Cardinal(@ds)) // 发送 WM_COPYDATA消息
else
ShowMessage('Fail send data to sticth');
FreeMem(ds.lpData); //释放资源
end;
------解决方案--------------------
这里有一套免费的控件,功能强大,专门满足程序间通讯。
http://bak-o-soft.dk/Delphi/PBSharePack.aspx
------解决方案--------------------
直接用网络组件也一样呀!
------解决方案--------------------
FindWindow可能返回0,试试用全局变量保存FindWindow的值,而不是每次都去找
或者改成Socket通讯吧
------解决方案--------------------
建议使用命令管道
http://guanyue7613.blog.163.com/blog/static/885147420111074428261/
procedure TViForm.SendmsgToSticthForm(Msgstr: string);
var
ds: TCopyDataStruct;
hd: THandle;
//Inf: PSfyzxtInformation;
begin
//
ds.cbData := Length(Msgstr)+1;
GetMem(ds.lpData,ds.cbData); //为传递的数据区分配内存
StrCopy (ds.lpData,PChar(Msgstr));
Hd := FindWindow(nil,Pchar('Sticth')); // 获得接受窗口的句柄
if Hd <> 0 then
SendMessage(Hd,WM_COPYDATA, 0,Cardinal(@ds)) // 发送 WM_COPYDATA消息
else
ShowMessage('Fail send data to sticth');
FreeMem(ds.lpData); //释放资源
end;
------解决方案--------------------
这里有一套免费的控件,功能强大,专门满足程序间通讯。
http://bak-o-soft.dk/Delphi/PBSharePack.aspx
------解决方案--------------------
直接用网络组件也一样呀!
------解决方案--------------------
FindWindow可能返回0,试试用全局变量保存FindWindow的值,而不是每次都去找
或者改成Socket通讯吧
------解决方案--------------------
建议使用命令管道
http://guanyue7613.blog.163.com/blog/static/885147420111074428261/