Hwnda := FindWindowEx(Hwnda,0,'SysTabControl32',nil);//找到句柄
SendMessage(Hwnda, TCM_GETITEMCOUNT, 0, 0);//可以找到tab总数
SendMessage(Hwnda, TCM_GETITEMW, 0, longint(@buf));//这个取不出标题
SendMessage(Hwnda, TCM_GETITEM, 0, longint(@item));//这个可以找到 item 但还是取不到标题请问怎样才能取得的每个tab的标题? 

解决方案 »

  1.   

    使用TCM_GETITEM 这个消息取得Item,但是不一定会有标题,因为标题并不是必须的。
      

  2.   

    如果你是取得别人窗口中的该控件的句柄的话,那么你一定要在那个进程内部才能获得标题
    具体代码,可以看看CnPack中的任务栏控件TCnTaskBar中的代码
      

  3.   

    参考
    function TTabStrings.Get(Index: Integer): string;
    const
      RTL: array[Boolean] of LongInt = (0, TCIF_RTLREADING);
    var
      TCItem: TTCItem;
      Buffer: array[0..4095] of Char;
    begin
      TCItem.mask := TCIF_TEXT or RTL[FTabControl.UseRightToLeftReading];
      TCItem.pszText := Buffer;
      TCItem.cchTextMax := SizeOf(Buffer);
      if SendMessage(FTabControl.Handle, TCM_GETITEM, Index,
        Longint(@TCItem)) = 0 then
        TabControlError(Format(sTabFailRetrieve, [Index]));
      Result := Buffer;
    end;
      

  4.   

    闲下来了,研究了一下,下面的代码可以实现:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        TabSheet4: TTabSheet;
        TabSheet5: TTabSheet;
        TabSheet6: TTabSheet;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses CommCtrl;function TabStringsGet(h:HWND;Index: Integer): string;
    const
      RTL: array[Boolean] of LongInt = (0, TCIF_RTLREADING);
    var
      TCItem: TTCItem;
      Buffer: array[0..4095] of Char;
    begin
      TCItem.mask := TCIF_TEXT;
      TCItem.pszText := Buffer;
      TCItem.cchTextMax := SizeOf(Buffer);
      SendMessage(h, TCM_GETITEM, Index,Longint(@TCItem));
      Result := Buffer;
    end ;procedure TForm1.Button1Click(Sender: TObject);
    var
     i:integer;
     h:hwnd;
    begin
     h:=FindWindow(0,'SysTabControl32的句柄,即TAB的父句柄');
     if h=0 then exit;
     for i:=0 to SendMessage(h, TCM_GETITEMCOUNT, 0, 0)-1 do
      showmessage(TabStringsGet(h,i));
    end;end.
      

  5.   

    可以EnumWindowEx枚举所有的窗口和子窗口...然后发送消息TCM_GETITEM