AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WindowFromPoint

Ein Thema von Amateurprofi · begonnen am 27. Nov 2023 · letzter Beitrag vom 28. Nov 2023
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#1

WindowFromPoint

  Alt 27. Nov 2023, 22:27
Ich möchte einen bestimmten Bereich vom Screen zu kopieren und nutze zur Ermittlung des zu kopierenden Bereichs die unten stehende Funktion.
Vorab:
Es funktioniert, aber ich habe Fragen.
Wenn der Mauszeiger nicht auf ein Fenster zeigt, sondern auf einen leeren Bereich auf dem Desktop, ergibt WindowFromPoint(MP) nicht 0.

Mit der modifizierten Version (untere Funktion) kriege ich folgende Ergebnisse.

Code:
MP: 876, 498
Fenster an Mousepos
Win: 65822
Win-Text: "FolderView"
Win-Class: "SysListView32"
Win hat Parent
Parent: 65820
Parent-Text: ""
Parent-Class: "SHELLDLL_DefView"
Parent: 65818
Parent-Text: "Program Manager"
Parent-Class: "Progman"
ST: stControl
WinRect=DesktopRect, Screen kopieren
ST: stScreen
Mein Eindruck ist, dass WindowFromPoint(MP) niemals 0 ergibt.
Frage:
Warum ist das so?

Delphi-Quellcode:
type
   TSourceType=(stScreen,stWindow,stControl);
Delphi-Quellcode:
FUNCTION GetSourceRect(var ST:TSourceType):TRect;
var MP:TPoint; Win:HWND;
begin
   GetCursorPos(MP);
   Win:=WindowFromPoint(MP);
   if Win=0 then begin // // Kein Fenster an MousePos. Screen kopieren
      Result:=Screen.DesktopRect;
      ST:=stScreen;
   end else begin // Fenster oder Control kopieren
      if GetParent(Win)<>0 then begin // Ist Control (hat Parent)
         ST:=stControl;
      end else begin // Fenster kopieren
         ST:=stWindow;
      end;
      GetWindowRect(Win,Result);
      if Result=Screen.DesktopRect then ST:=stScreen;
   end;
end;
var List:String;
Delphi-Quellcode:
FUNCTION GetSourceRectList(var ST:TSourceType):TRect;
//------------------------------------------------------------------------------
PROCEDURE Add(const S:String);
begin
   if List<>'then List:=List+#13;
   List:=List+S;
end;
//------------------------------------------------------------------------------
PROCEDURE AddWin(Win:HWND; const S:String);
var Buf:Array[0..256] of Char;
begin
   Add(S+': '+IntToStr(Win));
   GetWindowText(Win,Buf,255);
   Add(S+'-Text: "'+Buf+'"');
   GetClassName(Win,Buf,255);
   Add(S+'-Class: "'+Buf+'"');
end;
//------------------------------------------------------------------------------
PROCEDURE AddParents(Win:HWND);
var Temp:HWND;
begin
   AddWin(Win,'Parent');
   Temp:=Win;
   repeat
      Win:=Temp;
      Temp:=GetParent(Win);
      if Temp<>0 then AddWin(Temp,'Parent');
   until Temp=0;
end;
//------------------------------------------------------------------------------
var MP:TPoint; Win:HWND;
begin
   GetCursorPos(MP);
   Win:=WindowFromPoint(MP);
   Add('MP: '+IntToStr(MP.X)+', '+IntToStr(MP.Y));
   if Win=0 then begin // Kein Fenster an MousePos. Screen kopieren
      Add('Kein Fenster an Mousepos');
      Add('ST: stScreen');
      Result:=Screen.DesktopRect;
      ST:=stScreen;
   end else begin // Fenster oder Control kopieren
      Add('Fenster an Mousepos');
      AddWin(Win,'Win');
      if GetParent(Win)<>0 then begin // Ist Control (hat Parent)
         Add('Win hat Parent');
         AddParents(GetParent(Win));
         Add('ST: stControl');
         ST:=stControl;
      end else begin // Fenster kopieren
         Add('Win hat kein Parent');
         Add('ST: stWindow');
         ST:=stWindow;
      end;
      GetWindowRect(Win,Result);
      if Result=Screen.DesktopRect then begin
         Add('WinRect=DesktopRect, Screen kopieren');
         Add('ST: stScreen');
         ST:=stScreen;
      end;
   end;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: WindowFromPoint

  Alt 27. Nov 2023, 23:20
Ich würde annehmen, dass Windowfrompoint Dir das DesktopWindow zurückliefert, wenn sonst kein anderes Fenster vorhanden ist (sollte also = GetDesktopwindow) sein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

AW: WindowFromPoint

  Alt 28. Nov 2023, 00:05
Genau, in Windows ist (fast) alles ein Fenster (selbst ein kleines Edit).
Und der Desktop ist nunmal standardmäßig eine ListView der ersten Instanz einer Explorer.exe.

Ausnahme diese wurde beended, nicht gestartet (KioskModus), oder ist abgestürzt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Nov 2023 um 08:35 Uhr)
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
214 Beiträge
 
#4

AW: WindowFromPoint

  Alt 28. Nov 2023, 07:22
Hi,

If you want to make it fail, then you need a Windows without the Explorer, so either try to kill/disable it, or try on Windows Server Core (without GUI) https://learn.microsoft.com/en-us/wi...top-experience
I love (re)installing these after renting a dedicated server, just removing the GUI and Shell, but it seems Microsoft did removed this feature recently so you can't uninstall/install the GUI any more, shame !

Server 2008/2012 does support this feature unless they ruined it by some update, Server 2016/2019 not sure, the recent ones sure not have the ability to install/uninstall the GUI.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#5

AW: WindowFromPoint

  Alt 28. Nov 2023, 11:00
Ich würde annehmen, dass Windowfrompoint Dir das DesktopWindow zurückliefert, wenn sonst kein anderes Fenster vorhanden ist (sollte also = GetDesktopwindow) sein.
Danke, Harry,
aber nein, es ist nicht das DeskTopWindow.
Hab mal das DeskTopWindow der Liste hinzugefügt, mit AddWin(GetDesktopWindow,'Desktop'); Noch ein (für mich) Mysterium:
Das DeskTopWindow hat die Caption "Logitech Gaming Software".

Code:
MP: 1303, 525
Desktop: 65552
Desktop-Text: "Logitech Gaming Software"
Desktop-Class: "#32769"
Fenster an Mousepos
Win: 65822
Win-Text: "FolderView"
Win-Class: "SysListView32"
Win hat Parent
Parent: 65820
Parent-Text: ""
Parent-Class: "SHELLDLL_DefView"
Parent: 65818
Parent-Text: "Program Manager"
Parent-Class: "Progman"
ST: stControl
WinRect=DesktopRect, Screen kopieren
ST: stScreen
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#6

AW: WindowFromPoint

  Alt 28. Nov 2023, 11:02
Genau, in Windows ist (fast) alles ein Fenster (selbst ein kleines Edit).
Und der Desktop ist nunmal standardmäßig eine ListView der ersten Instanz einer Explorer.exe.

Ausnahme diese wurde beended, nicht gestartet (KioskModus), oder ist abgestürzt.
Danke himitsu,
aber nein, es ist nicht das DesktopWindow.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#7

AW: WindowFromPoint

  Alt 28. Nov 2023, 11:05
Zitat:
Logitech Gaming Software
Dann hat sich bei dir eben bösartig ein Hook deines Maustreibers dort reingehackt.

Das da klingt aber verdächtig nach dem Desktop und der Explorer.exe
Zitat:
Win: 65822
Win-Text: "FolderView"
Win-Class: "SysListView32"
Win hat Parent
Parent: 65820
Parent-Text: ""
Parent-Class: "SHELLDLL_DefView"
Parent: 65818
Parent-Text: "Program Manager"
Parent-Class: "Progman"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#8

AW: WindowFromPoint

  Alt 28. Nov 2023, 11:07
Hi,

If you want to make it fail, then you need a Windows without the Explorer, so either try to kill/disable it, or try on Windows Server Core (without GUI) https://learn.microsoft.com/en-us/wi...top-experience
I love (re)installing these after renting a dedicated server, just removing the GUI and Shell, but it seems Microsoft did removed this feature recently so you can't uninstall/install the GUI any more, shame !

Server 2008/2012 does support this feature unless they ruined it by some update, Server 2016/2019 not sure, the recent ones sure not have the ability to install/uninstall the GUI.
Thank youe Kas OB.
Seems i have to live with the situation (don't want to change the system).
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

AW: WindowFromPoint

  Alt 28. Nov 2023, 11:13
Zitat:
Logitech Gaming Software
Dann hat sich bei dir eben bösartig ein Hook deines Maustreibers dort reingehackt.

Das da klingt aber verdächtig nach dem Desktop und der Explorer.exe
Zitat:
Win: 65822
Win-Text: "FolderView"
Win-Class: "SysListView32"
Win hat Parent
Parent: 65820
Parent-Text: ""
Parent-Class: "SHELLDLL_DefView"
Parent: 65818
Parent-Text: "Program Manager"
Parent-Class: "Progman"
Danke himitsu,
"Dann hat sich bei dir eben bösartig ein Hook deines Maustreibers dort reingehackt."
Ja, so scheint es zu sein.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 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