![]() |
Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Hallo zusammen,
:?: wie kann ich programmtechnisch erkennen ob der Bildschirmschoner oder die Bildschirmsperre aktiviert wurde. Ebenfalls wäre für mich der umgekehrte Weg interressant, wann der Bildschirmschoner bzw. die Bildschirmsperre nicht mehr aktiv sind. :arrow: Mein Grund hierfür ist, ich soll ein Programm entwickeln, welches die Arbeitszeiten am PC automatisch mitlogt. Bei aktiven Bildschirmschoner arbeitet ja keiner am PC und ich muss das log während des Bildschirmschoners bzw. der Bildschirmsperre pausieren lassen. :thumb: Ich hoffe Ihr könnt mir helfen. :dp: |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Hallo,
zu Deinen Fragen kann ich dir ad hoc jetzt keine Antwort geben. Was ich mich allerdings frage, ist, ob Dein Ansatz richtig ist. Es steht zwar außer Frage, dass niemand am Rechner arbeitet, wenn dieser gesperrt bzw. der Bildschirmschoner aktiv ist; aber reichen diese Kriterien aus? Ich habe bspw. das automatische Aktivieren des Bildschirmschoners deaktiviert. Und wenn ich telefoniere, dann sperre ich auch nicht gleich die komplette Arbeitsstation *g* Nach Deinen Kriterien würde ich also permanent am PC arbeiten - würde meinem Chef sicherlich gefallen ;o) Ich denke, die einzigen sinnvollen Kriterien für Deine Zwecke sind die Tastatur und die Maus. Diese solltest Du überwachen. Selbst dann, wenn ich etwas am PC lese, werde ich nicht umher kommen, irgendwann die Maus oder die Tastatur zu benutzen, um bspw. eine Seite 'weiter zu blättern' o.ä. Mag sein, dass auch mein Vorschlag nicht der sinnvollste ist; vlt. interessiert Dich meine Meinung auch gar nicht - aus meiner Sicht aber ein durchaus diskutables Thema ;) |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Und was ist, wenn ich zu einem Kollegen gehe, um mit ihm was zu besprechen? Oder ich am Whiteboard stehe um was zu skizzieren? Oder wenn ich irgendeine andere Tätigkeit mache, die nichts mit dem Computer zu tun hat?
Eventuell sollte man sich erstmal generell über so ein Konzept Gedanken, bevor man versucht die technischen Probleme zu lösen. |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Zitat:
Zitat:
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Den Hintergrund zu erfragen ist hier wohl nicht entscheidend.
Es gibt eine klare Anforderung, und die sollte umgesetzt werden. Da sollte es wohl keine Rolle spielen, ob einer von uns das für sinnvoll hält, oder nicht. Schau Dir mal ![]() Scheinen exakt das zu machen, was Du wünschst. Dennoch biin ich skeptisch, ob diese Kriterien ausreichen. |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Danke für eure Bedenken,
Zitat:
Zitat:
Ich habe vergessen mitzuteilen, dass die Arbeitszeit für verschiedene Projekte gelogt werden soll. Der Mitarbeiter kann also die sogenannte Stopuhr manuell starten und beenden. Es geht jetzt nur noch darum, dass wenn die Zeit gestartet wurde automatisch diese pausiert wird, wenn der Bildschirmschoner bzw. die Bildschimsperre aktiv ist. :wink: Ich hoffe das Projekt ist nun ein bisschen klarer. :hi: |
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Zitat:
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
Zitat:
|
Re: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv i
DGL-Luke hat dir doch einen Link gegeben.
|
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: ![]() |
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Zitat:
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) |
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Moment, ist true nicht alles <> 0? Oder weshalb predigen wir immer, dass man nicht auf true prüfen soll?
|
AW: Erkennen ob Bildschirmsch. bzw. Bildschirmsperre aktiv ist
Zitat:
Und BOOL/LongWool ist 4 Byte, wenn da bei einem True zufällih im niedrigsten Byte ein/einige Bits gesetzt sind, dann wird das auch als True erkannt. Fazit: du hattest viel Glück @Sir Rufo: jupp, war'n Denk/-Schreibfehler :oops: @Detlef: Ja, beim Prüfen muß auf <>0 (not false) verglichen werden. Die Konstanten für TRUE geben ja nur einen möglichen Wert for. WinAPI 0 und -1 und beim Delphi-Boolean ist es 0 und 1 und schon erkennt man auch ein kleines Problem ala -1 <> 1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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