找到SysTabControl32的句柄 怎样取得的每个tab的标题?该怎么解决

找到SysTabControl32的句柄 怎样取得的每个tab的标题?
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的标题?

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

------解决方案--------------------
如果你是取得别人窗口中的该控件的句柄的话,那么你一定要在那个进程内部才能获得标题
具体代码,可以看看CnPack中的任务栏控件TCnTaskBar中的代码
------解决方案--------------------
参考
Delphi(Pascal) code
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;

------解决方案--------------------
关注。
------解决方案--------------------
闲下来了,研究了一下,下面的代码可以实现:

unit Unit1;

interface

uses
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.
------解决方案--------------------
可以EnumWindowEx枚举所有的窗口和子窗口...然后发送消息TCM_GETITEM