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/)
-   -   Delphi WindowFromPoint löst Exception aus bei Strg+Alt+Entf (https://www.delphipraxis.net/144299-windowfrompoint-loest-exception-aus-bei-strg-alt-entf.html)

PeterParker 4. Dez 2009 15:23


WindowFromPoint löst Exception aus bei Strg+Alt+Entf
 
Hallo,

ich nutze WindowFromPoint in einem Timer um zu prüfen, ob die Maus über einem bestimmten Element schwebt, da dieses kein OnExit Ereignis hat.

Das funktioniert auch sehr gut, bis Strg+Alt+Entf gedrückt wird. Dann kommt eine Exception

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EOSError aufgetreten. Meldung: 'Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
und hinterher

Zitat:

Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen.
Leider kann man diese exception nicht mit try except abfangen.

Ganz leicht kann man das mit folgendem Codeschnipsel nachbauen

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := IntToStr(WindowFromPoint(Mouse.CursorPos));
end;
Fällt euch vielleicht ein, wie man die Exception umgehen kann?

Gruß Philip

Bernhard Geyer 4. Dez 2009 15:28

Re: WindowFromPoint löst Exception aus bei Strg+Alt+Entf
 
Zitat:

Zitat von PeterParker
Fällt euch vielleicht ein, wie man die Exception umgehen kann?

Ja, für sowas nicht Mouse.CurserPos verwenden sondern direkt die WinAPI-Funktion:

Delphi-Quellcode:
 Windows.GetCursorPos(result)
Nicht nur Strg+Alt+Entf ist ein Fall das Windows.GetCursorPos False zurückliefert sondern auch der Remote Deskotp mit schließen der Fernsteuerung ohne abmelden.

turboPASCAL 4. Dez 2009 15:36

Re: WindowFromPoint löst Exception aus bei Strg+Alt+Entf
 
Ich würde in diesem Fall einen Low Level Mousehook verwenden und somit das verwenden eines Timers
umgehen.

PeterParker 7. Dez 2009 15:42

Re: WindowFromPoint löst Exception aus bei Strg+Alt+Entf
 
Ja, danke!

Bin gar nicht darauf gekommen, dass das Problem bei "Mouse.CursorPos" liegt, weil der Ausdruck so harmlos aussieht. :roll:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Mousepos: TPoint;
begin
  Windows.GetCursorPos(Mousepos);
  Label1.Caption := IntToStr(WindowFromPoint(Mousepos));
end;
Jetzt klappts


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr.

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