![]() |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Zitat:
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Lesen hilft. DGL-Luke und nicht s-off!
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Hi,
ob der Bildschirmschoner gerade aktiv ist könnte man so ermitteln:
Delphi-Quellcode:
Getestet unter WinXP und Win98SE.
var
Running: bool; begin SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,@Running,0); if Running then ... |
AW: Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Ich weiß, dass das Aufwärmen alter Themen wenig Freude auslöst, ABER:
Ich habe ca. am 11. November 2010 ein älteres Update in mein TurboDelphi wegen einer kompletten Win-Neuinstallation hinzugefügt. Bis dahin lief folgender Code:
Delphi-Quellcode:
Seither bekomme ich eine Speicherzugriffsverletzung. Es funktioniert jetzt nur noch so:
Function CreateFromScreen: TJPEGImage;
Function SSaverActive: Boolean; Begin SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0); End; Begin Result:=TJPEGImage.Create; Try If SSaverActive Then Begin // Bildschirmschoner beenden End; // hier wird etwas gemacht... Except Result.Free;//Bei Fehlern den Speicher freigeben End; End; Procedure TForm1.FormCreate(Sender: TObject); Begin With CreateFromScreen Do Try SaveToFile('Wohinauchimmer.jpg'); Finally Free; End; End;
Delphi-Quellcode:
Kann mir das bitte mal jemand erklären?
Function SSaverActive: Boolean;
Begin SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Result, 0); End; // ^-- Unterfunktion ausgegliedert. Function CreateFromScreen: TJPEGImage; Begin Result:=TJPEGImage.Create; Try If SSaverActive Then Begin // Bildschirmschoner beenden End; // hier wird etwas gemacht... Except Result.Free;//Bei Fehlern den Speicher freigeben End; End; Ich habe 3 Tage daran gesessen, das in meinem mehrere tausend Zeilen umfassenden Projekt herauszufinden. Und es liegt definitiv an der Funktion
Delphi-Quellcode:
, weil ich alles andere durchgetest habe. Ist das nur ein Phänomen von TurboDelphi oder schlimmer noch von meiner Installation? Komisch ist, dass es auf 2 Rechnern nicht mehr klappt.
SSaverActive
Gruß, Alex |
AW: Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Ich nehme (fast) alles zurück!
Ich habe mir nochmal den Code von bitsetter angesehen und da ist mir ein kleines Detail aufgefallen: Es muss
Delphi-Quellcode:
statt
Bool
Delphi-Quellcode:
heißen; dann klappt es auch mit der Function.
Boolean
Bleibt nur noch die Frage, warum es bislang klappte? |
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Delphi-Quellcode:
Und im Erfolgsfall nicht?
Result.Free;//Bei Fehlern den Speicher freigeben
|
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Noch schlimmer: wenn innerhalb der Funktion ein Fehler auftritt, wird das JPEG freigegeben, aber nicht genullt. In der aufrufenden Routine wird dann ggf. versucht, das Objekt erneut freizugeben, das sollte ordentlich knallen. Im Übrigen sollten IMO Funktionen keine Objekte zurückgeben, die sie selbst erzeugen, aber die Diskussion hatten wir ja bereits mehrfach hier.
|
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Boolean = delphieigener Typ (da sollte einem schnell klar werden, daß dieser bei der WinAPI nicht unbedingt was zu suchen hat)
aktuell: BOOL = LongBool (LongInt) = 4 Byte (False=0 und True=-1) Boolean = 1 Byte (False=0 und True=1) Boolean <> ByteBool = 1 Byte (False=0 und True=-1) (beim Prüfen: True <> 0) |
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
@himitsu
Danke für die Erklärung. Das ist einleuchtend. Aber warum klappte das bislang? Zitat:
Zitat:
|
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Zitat:
[edit] Hier ist z.B. so einer: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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