我想通过一个程序(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;

解决方案 »

  1.   

    代码没有多大问题。edit1:Tedit
    ------
    BTN:=FindWindowEx(hWnd,0,nil,'Edit1');
    你确定edit1里面的文本是Edit1吗?要注意大小写。
      

  2.   

    >>我都想了近一周了汗,你要先确定是否真的找到了程序B中edit句柄了??
      

  3.   

    是的,没有错,就是将A程序中edit1.text中的文本放入B程序的edit1中去
      

  4.   

    现在是找到了,应当是没有错的,因为程序一运行,按下A程序的事件按钮(此时光标还停在此程序edit1输入文本的后面),光标就转移停留在B程序的edit1内了,说明已找到B程序的edit1了,但是A程序中的内容为什么就不跟着一起进去呢
      

  5.   

    BTN:=FindWindowEx(hWnd,0,nil,'Edit1');
    if hwnd=0 then   //你这里判断BTN,改一下,看看到底找到没?如果找到不可能发不过去。
    begin
      ShowMessage('Edit1没找到');
      exit;
    end;再或者你A和B中的Edit里面值一样,所以发过去了但看不出来-_-!
      

  6.   

    哦,是的,我将,
    if hwnd=0 then
    begin
      ShowMessage('Edit1没找到');
      exit;
    改成
    if btn=0 then
    begin
      ShowMessage('Edit1没找到');
      exit;
    确实显示"edit1没找到”那是为何呢,在B程序中Tedit的name明明为edit1啊,而且在B程序中我也只有这一个控件来的,就这一个
      

  7.   

    >>在B程序中Tedit的name明明为edit1
    FindWindowEx中最后一个参数的意义不是name,而是text,明白否?也就是当时B程序中TEdit里面的text。
      

  8.   

    在这里,那应当怎样正确的写这个FindWindowEx函数里面的这个参数,不可能是写成这样吧BTN:=FindWindowEx(hWnd,0,'TEdit','Edit1.text');那应怎样的写最后一个edit1的参数呢
      

  9.   

    如果B程序里主窗体下就一个TEdit控件那就直接用FindWindowEx(hWnd,0,'TEdit',nil);
    如果B程序里主窗体下有多个TEdit控件:
    简单的:可以根据B程序启动时TEdit默认的text来获得句柄,然后放到A程序的全局变量里,只要B没有关闭,这个句柄就有效。这种方法不好,要根据具体应用来看。
    复杂的:同样根据FindWindowEx(hWnd,0,'TEdit',nil)来取,然后根据前一个和下一个类名来判断是否是所需的那个TEdit。
      

  10.   

    哦,这只是测试的程序,到时B程序会有许多的控件,包括多个的edit组件,难道就取不到准确的不同edit的句柄吗,如果是那样的来判断,那不就非常的复杂了,有没有简单的办法,
      

  11.   

    我又测试了一下,按你的方法写入,没有问题了,但是怎样判断是那一个edit却是真有一点难了,其只认TEdit中的text,但是一般edit的text在程序设计的时候都让它是空的,真的没有其它简单一点的办法可以在FindWindowEx(hWnd,0,'TEdit',nil);中设置一下就可以找到所需要的edit组件吗,看来过了一关,还的过一关了,就是怎样的判断是否是所需的那个Tedit,有这方面的实例吗,否则又的花费不少的时间了