我通过一些工具知道QQ主窗体的类名为:#32770
我通过FindWindow('#32770',nil) 返回QQ主窗体的句柄为: 4063784
然后通过GetClassName(4063784,buf,40)返回类名:buf= #32770,按理来说是没错。
可是我通过工具查看QQ的句柄应为:131346
我再用GetClassName(131346,buf,40),返回类名:buf=也为#32770,
奇怪????
为何FindWindow回取来的句柄不是真正的句柄呢?谁能告诉我原因吗,分不够再加

解决方案 »

  1.   

    windows的對話框類型窗體都是#32770的!
      

  2.   

    那如何取得QQ窗体的句柄呢,
    我只有通过最笨的方法,用WindowfromPoint这个取得 的,(每次重启就要重新取,好麻烦)
    还有别的好点的方法吗?
      

  3.   

    类名为“#32770”的窗体不是唯一~~
    FindWindow()只能找到排在第一个的窗体~~
    EnumWindows()遍历所以的窗体~~
    根据GetClassName()、GetWindowText()来判断~~
    在不就加上EnumChildWindows()来遍历子窗体,就能确定QQ的主窗体~~
      

  4.   

    //参考如下代码~~
    function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
    var
      vBuffer: array[0..255] of Char;
    begin
      GetClassName(hwnd, vBuffer, SizeOf(vBuffer));
      if SameText(vBuffer, 'Tencent_QQBar') then
        PInteger(lParam)^ := hwnd;
      Result := PInteger(lParam)^ = 0;
    end;function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
    var
      vBuffer: array[0..255] of Char;
    begin
      GetClassName(hwnd, vBuffer, SizeOf(vBuffer));
      if SameText(vBuffer, '#32770') then
        EnumChildWindows(hwnd, @EnumChildProc, lParam);
      if PInteger(lParam)^ <> 0 then PInteger(lParam)^ := hwnd;
      Result := PInteger(lParam)^ = 0;
    end;function WindowFromKeyWords: THandle;
    begin
      Result := 0;
      EnumWindows(@EnumWindowsProc, Integer(@Result));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Caption := IntToStr(WindowFromKeyWords);
    end;
      

  5.   

    zswangII(伴水清清)(职业清洁工) 
    在北京还是??????????哪里?
      

  6.   

    是的,我有QQ的句柄就够了,
    但是我不知道如何来取得QQ的句柄/..呵