procedure TForm1.Button5Click(Sender: TObject); var Handle, ChildHandle: HWND; clsName: pchar; text: array[0..255] of char; buffer: array[0..255] of char; begin getmem(clsName, 255); Handle := FindWindow(nil, 'forma1'); if Handle <> 0 then begin ChildHandle := GetWindow(Handle, GW_Child); while ChildHandle <> 0 do begin GetClassName(ChildHandle, clsName, 255); //showmessage(clsName); if string(clsName) = 'TEdit' then begin getwindowtext(ChildHandle, text, 255); // setwindowtext(ChildHandle,'343434'); StrCopy(buffer, 'DELPHI'); SendMessage(ChildHandle, WM_SETTEXT, 0, Integer(@buffer)); showmessage(text); end; ChildHandle := GetWindow(ChildHandle, GW_HWNDNEXT); end; end; freemem(clsName, 255); end;
1.所谓句柄就是Windows操作系统中用来标识各种对象的一个整型值。你有了句柄就可以操作一个对象(不管他是GDI对象还是组件对象) 2. 你可以使用发送消息的方式来传递Edit1.Text. 比如在A1程序里面有一个按钮,按钮的单击事件这样写 const MY_MESSAGE = WM_USER + 1;var p :PChar; begin p := PChar(Edit1.Text); SendMessage(A2应用程序的句柄, MY_MESSAGE, @p, 0); end;A2应用程序就处理MY_MESSAGE的wParam参数 var p :PChar; begin p := PChar(Msg.wParam); ShowMessage(StrPas(p)); end;
然后随便哪个事件里写form1.Edit1.text就可以得到
var
Handle, ChildHandle: HWND;
clsName: pchar;
text: array[0..255] of char;
buffer: array[0..255] of char;
begin
getmem(clsName, 255);
Handle := FindWindow(nil, 'forma1');
if Handle <> 0 then
begin
ChildHandle := GetWindow(Handle, GW_Child);
while ChildHandle <> 0 do
begin
GetClassName(ChildHandle, clsName, 255);
//showmessage(clsName);
if string(clsName) = 'TEdit' then
begin
getwindowtext(ChildHandle, text, 255);
// setwindowtext(ChildHandle,'343434');
StrCopy(buffer, 'DELPHI');
SendMessage(ChildHandle, WM_SETTEXT, 0, Integer(@buffer)); showmessage(text);
end;
ChildHandle := GetWindow(ChildHandle, GW_HWNDNEXT);
end;
end;
freemem(clsName, 255);
end;
2.
你可以使用发送消息的方式来传递Edit1.Text.
比如在A1程序里面有一个按钮,按钮的单击事件这样写
const
MY_MESSAGE = WM_USER + 1;var
p :PChar;
begin
p := PChar(Edit1.Text);
SendMessage(A2应用程序的句柄, MY_MESSAGE, @p, 0);
end;A2应用程序就处理MY_MESSAGE的wParam参数
var
p :PChar;
begin
p := PChar(Msg.wParam);
ShowMessage(StrPas(p));
end;
2、应用程序的句柄你可以用Application.Handle来获得,当前窗体的句柄可以用Self.Handle来获得,其他的程序你不能得到像Application.Handle这样的应用程序句柄,不过你可以用FindWindow等相关API函数得到它的窗体句柄,用CreateToolhelp32Snapshot和Process32First等函数得到它的进程句柄,
3、正如一楼所说,form1里user form2,form2里user form1,快捷键用ALT+F11(如果我没记错的话),就可以互相调用了