如何能获得EXPLORER.EXE进程的窗口句柄呢?我用FindWindow只能找到一个窗口的句柄。比如我打开‘计算机’,找到句柄了,然后对窗口进行更改。但是当我打开‘我的文档’,又要重新找句柄更改。我见过一个个软件,它只要对任意的WINDOWS窗口,进行改变,其余的窗口都会一起改变的。麻烦问下,它是怎么找的句柄?谢谢大家了~

解决方案 »

  1.   

    枚举窗口或者HOOK窗口,建议用第二种
      

  2.   


    function FindProcessName:THandle;
    var
      lppe: tprocessentry32;
      sshandle: thandle;
      found: boolean;
    begin
      result:=0;
      sshandle := createtoolhelp32snapshot(TH32CS_SNAPALL, 0);
      found := process32first(sshandle, lppe);
      while found do
      begin
        if ansiCompareText(ExtractFileName(lppe.szExefile),'EXPLORER.EXE') = 0 then
        begin
           result:=lppe.th32ProcessID;
           break;
        end;
        found := process32next(sshandle, lppe);
      end;
      CloseHandle(sshandle);
    end;
      

  3.   

    楼上找的是进程IDfunction lpEnumFunc(H: HWND): Boolean; stdcall;
    var
      P, p2: array[0..255] of Char;
    begin
      GetClassName(H, P, 256);
      if Strpas(P) = 'IEFrame' then
      begin
        GetWindowText(H, p2, 256);
        Form1.Memo1.Lines.add('句柄为: ' + IntToHex(H, 16)  + ' 窗口名:' + p2);
      end;
      result := True;
    end;procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      Str: TStringList;
      i: integer;
    begin
      Str := TstringList.Create;
      EnumWindows(@lpEnumFunc, LongInt(Str));
      Str.Free;
    end;
      

  4.   


    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
      EnumWindows(@lpEnumFunc, 0);
    end;
      

  5.   

    对任意的WINDOWS窗口,进行改变,其余的窗口都会一起改变的。 这个貌似要枚举窗口句柄 并发送消息的
      

  6.   

    推荐Delphi Win32 API应用大全 这本书