获取指定标题窗体的句柄应该没什么问题用Findwindow函数就行了,可是问题出来了:如果有多个类名及标题相同的窗体,如何才能获取他们各自的句柄呢?

解决方案 »

  1.   

      self.handle 试试!!
      

  2.   

    找某个窗口的某个BUTTON ,例子很简单就是用了
    FindWindow,EnumChildWindows两个函数,要找的具体BUTTON在EnumChildWindowsProc回调函数中
    function EnumChildWindowsProc(hwd: Hwnd): Boolean; stdcall;
    begin
      Result := true;
      GetClassName(hwd, buffer, 256);
      if String(Buffer) <> 'Button' then Exit;
      getwindowtext(hwd, buffer, 256);
      if String(Buffer) <> '验证全部' then Exit;
      h := hwd;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      hwnd1,hwnd2,hwnd3,hwnd4:   DWORD;
    begin
      h := 0;
      hwnd1 := FindWindow(nil, '代理猎手');
      if hwnd1 <> 0 then
      begin
        if EnumChildWindows(hwnd1, @EnumChildWindowsProc, 0) then
        if h = 0 then exit;
        SendMessage(h, WM_LBUTTONDOWN , 0, 0);
        SendMessage(h,WM_LBUTTONUp, 0, 0);
      end;
    end;
      

  3.   


    function EnumWindowCallBack(HWND:THandle;lparam:longint):longint;stdcall;
    var
      Wnd_TEXT:string;
    begin
      Setlength(Wnd_TEXT,255);
      GetWindowText(HWND,PChar(Wnd_TEXT),255);//Wnd_TEXT中保存窗口标题
      Result:=1;
    end;procedure Button1Click(Sender: TObject);
    begin
      EnumWindows(@EnumWindowCallBack,0);
    end;用EnumWindows即可,但只能枚举顶层窗口。
      

  4.   

    妖哥的Spy4Win有获取指定窗口的功能。