找到某个应用程序的一个窗体,或者该窗体的句柄
然后想在该窗口中查找某个类名为 Edit  和 类型为Button 字符串值是"确定" 按钮
在Edit中程序自动输入某个字符串,然后模拟点击 "确定"按钮,程序如下:
procedure autodo(str:string);
var h,chwnd: THandle;
begin
 h := FindWindow(pchar('#32770'),nil);
// h := FindWindow(0,'发送媒体信息:');
 if h=0 then showmessage('没有找到发送信息窗口')
   else
    begin
      cHwnd:=FindWindowEx(h,0,pchar('Edit'),nil);   //查找#32770的子窗口'连接'
      if chwnd<>0 then
        begin
          sendmessage(chwnd,WM_settext,length(str),integer(pchar(str)));
          cHwnd:=FindWindowEx(h,0,pchar('Button'),'确定');
          if chwnd<>0 then
             begin
                SendMessage(chwnd,WM_LBUTTONDOWN,0,0);  //鼠标左键按下
                SendMessage(chwnd,WM_LBUTTONUP,0,0);    //鼠标左键抬起
             end;
        end
      else
        showmessage('没找到子类')
   end;
end;程序运行后找到窗体,但找不到 Edit 和Button 
请问程序该如何修改 ,运行环境XP

解决方案 »

  1.   

    应该没有问题的,不知你要改什么呢?
    如果是改系统的一些东西,比如系统的开始按钮,你想把开始换成别的字,windows98下才可以。
    如果要改一些软件比如:QQ之类的登陆按钮应该是可以的啊。
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      h,t: thandle;
    begin
      h := FindWindow(pchar('#32770'),nil);
      t:= windows.FindWindowEx(h,0,'button','登录');
      sendmessage(t,WM_SETTEXT,0,LPARAM(PChar('aaa')));
    end;你试试这个。没问题的。
      

  3.   

    to:mxhong456(毛毛) 你把QQ登录窗口打开后,再运行我的代码。楼主所要找到句柄很显然是QQ登录窗口的handle,他想通过找到classname为edit的子窗口的句柄。
      

  4.   

    cHwnd:=FindWindowEx(h,0,pchar('Edit'),nil);   //查找#32770的子窗口'连接'
     这句肯定不行 
     如果是找qq的edit 肯定不行 
     建议: 先用spy++ 分析一下,(可能h, 不是Edit 父窗口的句柄, 眼睛看到的不一定是正确的 : ) )
            再用FindWindowEx 得到Edit 的句柄
      

  5.   

    QQ设了很多防线了,要不就装一个老一点的QQ试试吧,或许有用哟