Hallo liebe DPler,
ich versuche mich gerade an einer Methode, die herausfinden soll, ob andere Programme im Moment im Fullscreen-Modus laufen.
Sinn der Geschichte: Ich benutze in einem Programm regelmäßig (Timer) BringtoFront, jedoch ist das doof, wenn man sich gerade einen Film im Vollbildmodus anschaut, weil sich das Fenster richtigerweise vor den Film drängt.
Mein bisheriger Ansatz ist:
-EnumWindows
-GetWindowPlacement / GetWindowRect
Nun würde ich das gerne mit Screen.Width/Screen.Height vergleichen, aber da kommt bei einer >= Abfrage nichts Gescheites bei raus. (In beiden Fällen)
Hier mal mein SRC:
Delphi-Quellcode:
function AnyFullscreenWindows: Boolean;
var
AnyMaximized: Boolean;
begin
AnyMaximized:=false;
EnumWindows(@EnumWindowCallback, integer(@AnyMaximized));
result:=AnyMaximized;
end;
Variante1
Delphi-Quellcode:
function CompareRectSize(first, second: trect): real; stdcall;
// Result= Verhaeltnis
begin
result:= ((second.Right-second.Left)*
(second.Bottom-second.Top)) /
((first.Right-first.Left)*
(first.Bottom-first.Top));
end;
function EnumWindowCallback(hwnd:HWND; lParam: pBoolean): Boolean; stdcall;
var
ScreenRect,WindowRect: tRect;
begin
ScreenRect.Left:=0;
ScreenRect.Top:=0;
ScreenRect.Right:=Screen.Width;
ScreenRect.Bottom:=Screen.Height;
GetWindowRect(HWND,WindowRect);
lParam^:= (lParam^) or (CompareRectSize(ScreenRect,WindowRect)>=1);
Result:=true;
end;
Variante2
Delphi-Quellcode:
function GetWindowState(Wnd: HWnd): Boolean; stdcall;
var WPlacement : PWINDOWPLACEMENT;
begin
GetMem(WPlacement,SizeOf(TWINDOWPLACEMENT));
WPlacement^.Length:=SizeOf(TWINDOWPLACEMENT);
if GetWindowPlacement(Wnd,WPlacement) then
if (Wplacement^.rcNormalPosition.Left<=0) and
(Wplacement^.rcNormalPosition.Top<=0) and
(screen.Width<=Wplacement^.rcNormalPosition.Right) and
(screen.Height<=Wplacement^.rcNormalPosition.Bottom)
then result:=true
else result:=false
else
Result:=false;
FreeMem(WPlacement);
end;
function EnumWindowCallback(hwnd:HWND; lParam: pBoolean): Boolean; stdcall;
var
ScreenRect,WindowRect: tRect;
begin
lParam^:= (lParam^) or (GetWindowState(HWND));
Result:=true;
end;[/
Ich tippe auf einen Denkfehler meinerseits, aber ich komme einfach nicht drauf. HILFE!
Vielen Dank im Vorraus
c20c