Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fullscreen anderer Programme abfragen/erkennen (https://www.delphipraxis.net/153872-fullscreen-anderer-programme-abfragen-erkennen.html)

c20c 18. Aug 2010 14:22

Fullscreen anderer Programme abfragen/erkennen
 
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! :-P


Vielen Dank im Vorraus

c20c


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz