请问如何的到另外一个正在运行的程序的窗体句柄,再向他里面的编辑框输入内容再让他自动点击确定按钮呢?能提供源代码更好!!解决立即给分!!多谢

解决方案 »

  1.   

    首先你要用FindWindow找到该窗体的句柄
    findWindow(ClassName,Title):Handle;
    ClassName是那个窗口的类名,参数可以用Spy++得到,而Title是那个窗口的标题。两个只要找到一个就可以,另一个置nil。
    得到了Handle后就调用SendMessage就应该可以呢。
      

  2.   

    Var
       hMemo, hRichEdit, HWindow, HButton: THandle; //句柄变量
       szText           : Array[0..255] Of char;   //得到的字符串
       MyText           : String;  //发送的字符串
    Begin
       HWindow := 0;//从零开始,即从第一个字窗体开始遍历查找   While true Do
          Begin         //找是#32770(对话框)的窗体
             HWindow := FindWindowEx(0, HWindow, '#32770', Nil);
             If HWindow <> 0 Then
                Begin              //找是AfxWnd42(这个我猜类似panel的容器)的窗体
                   hMemo := FindWindowEx(HWindow, 0, 'AfxWnd42', Nil);
                   If hMemo <> 0 Then
                      Begin                     //找是RICHEDIT的窗体
                         hRichEdit := FindWindowEx(hMemo, 0, 'RichEdit', Nil);
                         If hRichEdit <> 0 Then
                            Begin                         //想些什么随便啦,嘿嘿
                               MyText := '           阿德是个大帅哥,嘿嘿';                          //发消息,得到QQ中的文本
                               SendMessage(hRichEdit, WM_GetTEXT, 256,
                                  integer(@szText[0]));                          //加上自己的话 
                               MyText := szText + MyText;                          //再发给QQ
                               SendMessage(hRichEdit, WM_SETTEXT, 256,
                                  integer(MyText));                          //找到发送按钮
                               HButton := FindWindowEx(HWindow, 0, 'Button',
                                  '发送(&S)');                          //发点击消息,发送
                               SendMessage(HButton, BM_CLICK, 0, 0);                          //退出,如果去掉这句,就是给所有打开的QQ窗体发                          //否则,只发给最前面的QQ窗体
                               break;
                            End;
                      End;
                End;
          End;
    End;
      

  3.   

    非常感谢,但是我还是有些不明白,#32770,AfxWnd42是什么意思 ?他是怎么得来的呢?
    这个应用程序的主窗体上面就是个pagecontrol,在他其中的一个tabsheet里面有几个编辑框和一个botton,我就是想自己写个程序,让他自动输入内容并且确认
    不好意思啊,我太菜了,非常感谢大家再顶顶好吗?很快就会给分了!
      

  4.   

    #32770,AfxWnd42分别是类名和窗口名,用spy++ 可以获得
      

  5.   

    都是类名,不好意思,Afx开头的,一般是MFC开发的窗体
      

  6.   

    #32770,AfxWnd42都是QQ的窗体的类名(控件),是从spy++ 得来的。
      

  7.   

    有个登陆窗体,就比如qq吧,我用spy++得到他的类名是#32770,标题是登陆,
    我这样写啊,在一单击事件中:
    var wnd:hwnd;
    begin
       wnd:=findwindow(nil,'登陆');//写成这样也一样的结果 wnd:=findwindow(#32770,nil);
       if wnd<>0 then
       begin
        showmessage('yes');
       end
       else
        showmessage('no');
    end;
    执行结果showmessage是no。
      

  8.   

    我用的是delphi ,哪里有apy++下载吗?