我想通过一个程序(A),向另一个程序(B)的edit1.text中发送信息文本信息,或通过(A)的edit1.text赋值给(B)程序中的edit1.text中,可是不知怎样的用以下API函数的参数,总不成功,不能传送过去(因为是第一次用这些API函数):B程序的信息如下:窗口标题为“测试窗口”;Form1:Tform1;
edit1:Tedit
A程序的信息如下:窗口标题为“写入窗口”;Wrtfrm:TWrtfrm;
edit1:Tedit我在A程序中写下以下的代码,却不知错在那里,就是不能将A程序edit1.text中的内容发送到B程序的edit1中去:程序好像没有问题,但却不知是错在那里,我都想了近一周了。所有的资料也找了,还是解决不了,急啊!!!procedure TForm1.Button1Click(Sender: TObject);
var
btn,hWnd:THandle;
begin
hWnd:=FindWindow(nil, '测试窗口');
if hwnd=0 then
begin
ShowMessage('窗口没找到');
exit;
end;
BTN:=FindWindowEx(hWnd,0,nil,'Edit1');//获取B程序要输入文本的edit
if hwnd=0 then
begin
ShowMessage('Edit1没找到');
exit;
end;
sendMessage(BTN,WM_SETTEXT,0,integer(edit1.Text));//将“写入窗口”中edit1.text内容发送到
“测试窗口”edit1.text中end;
edit1:Tedit
A程序的信息如下:窗口标题为“写入窗口”;Wrtfrm:TWrtfrm;
edit1:Tedit我在A程序中写下以下的代码,却不知错在那里,就是不能将A程序edit1.text中的内容发送到B程序的edit1中去:程序好像没有问题,但却不知是错在那里,我都想了近一周了。所有的资料也找了,还是解决不了,急啊!!!procedure TForm1.Button1Click(Sender: TObject);
var
btn,hWnd:THandle;
begin
hWnd:=FindWindow(nil, '测试窗口');
if hwnd=0 then
begin
ShowMessage('窗口没找到');
exit;
end;
BTN:=FindWindowEx(hWnd,0,nil,'Edit1');//获取B程序要输入文本的edit
if hwnd=0 then
begin
ShowMessage('Edit1没找到');
exit;
end;
sendMessage(BTN,WM_SETTEXT,0,integer(edit1.Text));//将“写入窗口”中edit1.text内容发送到
“测试窗口”edit1.text中end;
------
BTN:=FindWindowEx(hWnd,0,nil,'Edit1');
你确定edit1里面的文本是Edit1吗?要注意大小写。
if hwnd=0 then //你这里判断BTN,改一下,看看到底找到没?如果找到不可能发不过去。
begin
ShowMessage('Edit1没找到');
exit;
end;再或者你A和B中的Edit里面值一样,所以发过去了但看不出来-_-!
if hwnd=0 then
begin
ShowMessage('Edit1没找到');
exit;
改成
if btn=0 then
begin
ShowMessage('Edit1没找到');
exit;
确实显示"edit1没找到”那是为何呢,在B程序中Tedit的name明明为edit1啊,而且在B程序中我也只有这一个控件来的,就这一个
FindWindowEx中最后一个参数的意义不是name,而是text,明白否?也就是当时B程序中TEdit里面的text。
如果B程序里主窗体下有多个TEdit控件:
简单的:可以根据B程序启动时TEdit默认的text来获得句柄,然后放到A程序的全局变量里,只要B没有关闭,这个句柄就有效。这种方法不好,要根据具体应用来看。
复杂的:同样根据FindWindowEx(hWnd,0,'TEdit',nil)来取,然后根据前一个和下一个类名来判断是否是所需的那个TEdit。