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的标题?
SendMessage(Hwnda, TCM_GETITEMCOUNT, 0, 0);//可以找到tab总数
SendMessage(Hwnda, TCM_GETITEMW, 0, longint(@buf));//这个取不出标题
SendMessage(Hwnda, TCM_GETITEM, 0, longint(@item));//这个可以找到 item 但还是取不到标题请问怎样才能取得的每个tab的标题?
具体代码,可以看看CnPack中的任务栏控件TCnTaskBar中的代码
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;
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.