AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

Offene Frage von "himitsu"
Ein Thema von Kirchi · begonnen am 31. Mai 2007 · letzter Beitrag vom 6. Dez 2010
Antwort Antwort
Seite 2 von 3     12 3      
Kirchi

Registriert seit: 20. Feb 2006
105 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 31. Mai 2007, 14:11
Zitat von Luckie:
DGL-Luke hat dir doch einen Link gegeben.
Dies ist aber eine Komponente, die zu erwerben ist. Vielleicht weiß ja jemand wie man so was selbst programmieren kann.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 31. Mai 2007, 14:16
Lesen hilft. DGL-Luke und nicht s-off!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 31. Mai 2007, 15:46
Hi,

ob der Bildschirmschoner gerade aktiv ist könnte man so ermitteln:
Delphi-Quellcode:
var
  Running: bool;
begin
  SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,@Running,0);
  if Running then
    ...
Getestet unter WinXP und Win98SE.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

AW: Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 6. Dez 2010, 11:04
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:
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;
Seither bekomme ich eine Speicherzugriffsverletzung. Es funktioniert jetzt nur noch so:
Delphi-Quellcode:
  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;
Kann mir das bitte mal jemand erklären?
Ich habe 3 Tage daran gesessen, das in meinem mehrere tausend Zeilen umfassenden Projekt herauszufinden. Und es liegt definitiv an der Funktion SSaverActive , 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.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#15

AW: Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i

  Alt 6. Dez 2010, 11:26
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 Bool statt Boolean heißen; dann klappt es auch mit der Function.

Bleibt nur noch die Frage, warum es bislang klappte?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

  Alt 6. Dez 2010, 11:35
Result.Free;//Bei Fehlern den Speicher freigeben Und im Erfolgsfall nicht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

  Alt 6. Dez 2010, 11:56
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

  Alt 6. Dez 2010, 12:04
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Dez 2010 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#19

AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

  Alt 6. Dez 2010, 12:21
@himitsu
Danke für die Erklärung. Das ist einleuchtend. Aber warum klappte das bislang?

... das JPEG freigegeben, aber nicht genullt.
Soll ich eine neue Frage aufmachen oder: Wie wird ein TJPEGImage genullt?

Im Übrigen sollten IMO Funktionen keine Objekte zurückgeben, die sie selbst erzeugen, aber die Diskussion hatten wir ja bereits mehrfach hier.
Kannst Du dazu bitte mal verlinken oder mir einen solchen per PM senden? Danke.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist

  Alt 6. Dez 2010, 12:23
Wie wird ein TJPEGImage genullt?
Entweder nil zuweisen oder mit FreeAndNil freigeben. Zu der Diskussion: den Thread muss ich erst raussuchen, dauert einen Moment.

[edit] Hier ist z.B. so einer: http://www.delphipraxis.net/104839-w...ekte-frei.html [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 6. Dez 2010 um 12:28 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:31 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