自己写的两个exe程序,同时运行,如何传递内容? 我写了两个exe程序,同时运行,需要把 1.exe中的 edit1.text,传递到 2.exe中的 edit2.text中显示,请问要怎么处理才能达到效果呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果只是传递 字符串内容 ,貌似 SendMessage WM_COPYDATA 最简单方便 除了楼上说的,还可以findwindow找到edit1的text,edit2直接取来用 额,同问,SendMessage好像不可以,可以说具体点吗?我来试试 这是进程通讯的问题,方法非常非常多,在 windows 下比较正规的有:通讯类1. TCP/UDP2. corba3. soap (即 WebService)microsoft 平台下专用1. COM/DCOM2. DDE unix 或者我们学习操作系统时经典1. share memory2. pipe(管道) 去网站找一本windows核心编程,第17章专门讲内存映射文件。sendmessage的wm_copydata方式,直接到msdn上搜索一下即可。 WM_CopyData最简单的方法内存映射管道Socket等等! WM_CopyData如果别人的程序 那就要钩子了 project1.exeunit Unit1;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var ds: TCopyDataStruct; hd: THandle;begin ds.cbData := Length(Edit1.Text) + 1; GetMem(ds.lpData, ds.cbData); StrCopy(ds.lpData, PAnsiChar(AnsiString(Edit1.Text))); hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄 if hd <> 0 then SendMessage(hd, WM_COPYDATA, Handle, Cardinal(@ds)) //Cardinal(@ds)) // 发送WM_COPYDATA消息 else ShowMessage('目标窗口没找到! '); FreeMem(ds.lpData); // 释放资源end;end.project2.exeunit Unit2;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type TForm2 = class(TForm) Edit2: TEdit; private { Private declarations } public procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA; { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Mymessage(var t: TWmCopyData);begin Edit2.text := string(StrPas(PAnsiChar(t.CopyDataStruct.lpData))); // 接受数据并显示。end;end. Delphi XE2 都是 String 都是widestringwinapi 好象还是 AnsiString哎..... 这个忘了。。ds.cbData := Length(AnsiString(Edit1.Text)) + 1; 如何将SQL DB中的资料汇入ORACLE DB中?请高人指点思路~~ 求救:关于RegSetValueEx方法 >有关DBGRID与DATAMODULE1(TABLE1/DATASOURCE)联接的问题??< 终止程序运行,Application.Terminate的使用 请问关于teechart pro6 for delphi6 的安装问题??? DBGrid简单问题 DELPHI第三方控件 请讲一点"虚拟键码"的知识,我在先此谢过了 如何使popmenu的项menuitem不都显示出来? 请问DELPHI版本问题. delphi xe 价格 隐藏路径Opendialog的问题
还可以findwindow找到edit1的text,edit2直接取来用
这是进程通讯的问题,方法非常非常多,在 windows 下比较正规的有:
通讯类
1. TCP/UDP
2. corba
3. soap (即 WebService)microsoft 平台下专用
1. COM/DCOM
2. DDE unix 或者我们学习操作系统时经典
1. share memory
2. pipe(管道)
sendmessage的wm_copydata方式,直接到msdn上搜索一下即可。
内存映射
管道
Socket等等!
如果别人的程序 那就要钩子了
unit Unit1;interfaceuses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
ds: TCopyDataStruct;
hd: THandle;
begin
ds.cbData := Length(Edit1.Text) + 1;
GetMem(ds.lpData, ds.cbData);
StrCopy(ds.lpData, PAnsiChar(AnsiString(Edit1.Text)));
hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄
if hd <> 0 then
SendMessage(hd, WM_COPYDATA, Handle, Cardinal(@ds)) //Cardinal(@ds)) // 发送WM_COPYDATA消息
else
ShowMessage('目标窗口没找到! ');
FreeMem(ds.lpData); // 释放资源
end;end.project2.exe
unit Unit2;interfaceuses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type
TForm2 = class(TForm)
Edit2: TEdit;
private
{ Private declarations }
public
procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA; { Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Mymessage(var t: TWmCopyData);
begin
Edit2.text := string(StrPas(PAnsiChar(t.CopyDataStruct.lpData))); // 接受数据并显示。
end;end.
winapi 好象还是 AnsiString
哎.....
ds.cbData := Length(AnsiString(Edit1.Text)) + 1;