du könntest anhand der Classnames das
Handle ermitteln von dem Fenster wo die Programmbtns drauf liegen.
Die Hierarchy ist wie folgt (Klassennamen)
Code:
Shell_TrayWnd
ReBarWindow32
MSTaskSwWClass
ToolbarWindow32
Wenn man also das ToolbarWindow32 mit ShowWindow ausblendet würde man die Buttons für die Programme nicht sehen. Anstelle von Ausblenden kannst du natürlich auch die Breite dann ermitteln.
Mit folgendem Source könnte man also die größe abfragen
Delphi-Quellcode:
function LGetHandle(AHandleSrc: Cardinal; var AHandleDst: Cardinal): Cardinal;
begin
AHandleDst := AHandleSrc;
result := AHandleDst;
end;
var LHandle: Cardinal;
LPlacement: TWindowPlacement;
begin
if LGetHandle(FindWindow('Shell_TrayWnd', nil), LHandle) <> 0 then
if LGetHandle(FindWindowEx(LHandle, 0, 'ReBarWindow32', nil), LHandle) <> 0 then
if LGetHandle(FindWindowEx(LHandle, 0, 'MSTaskSwWClass', nil), LHandle) <> 0 then
if LGetHandle(FindWindowEx(LHandle, 0, 'ToolbarWindow32', nil), LHandle) <> 0 then
begin
if GetWindowPlacement(LHandle, @LPlacement) then
ShowMessage(inttostr(LPlacement.rcNormalPosition.Right - LPlacement.rcNormalPosition.Left));
end;
Das Problem ist das man dabei die breite bekommt welche für die Fenster vorgesehen ist. Man weiß aber damit nicht wieviel FensterBtns drauf plaziert sind und wieviel Platz diese In Anspruch nehmen. Man kann also höchstens schauen wieviel Platz neben der Fensterleiste ist.
Wozu brauchst du das ganze? Vielleicht gibt es ja für das Ziel welches du erreichen willst eine bessere Lösung wo dieser Wert keine Rolle spielt.