AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Bildschirmschoner beenden aus Delphi-Anwendung

Bildschirmschoner beenden aus Delphi-Anwendung

Ein Thema von grips-net · begonnen am 3. Mär 2008 · letzter Beitrag vom 13. Sep 2010
Antwort Antwort
Seite 2 von 3     12 3   
Schwedenbitter

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

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 13:03
Leider nein. Trotzdem Danke.

Grundsätzlich soll der Bildschirmschoner ja laufen. Er soll meine "Bildschirme schonen", wie der Name schon sagt. Und da mein Programm ähnlich einem Service immer mitläuft, will ich daran nichts ändern. Ich möchte ihn weder ganz ausschalten, noch beim Start (TMessage.Result) unterdrücken.
Ich habe auch bei meinen Tests festgestellt, dass SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0); einen einmal laufenden Bildschirmschoner eben nicht beendet. Wäre auch zu einfach und schön gewesen

Ich möchte ihn lediglich kurz unterbrechen. Meinetwegen auch beenden, da er nach Ablauf einer bestimmten Zeit ohnehin wieder startet. Die Idee mit dem WM_Close gefiel mir daher. Evtl. könnte man über die vom Systemgelieferte Start-Message auch das Handle merken und dann einfach das schließen?

Ist jemandem bekannt, ob bei Msg.wParam = SC_SCREENSAVE das Handle in einem der Record-Variablen mitgeliefert wird? Ich kann das schlecht ausprobieren, da spätestens bei meiner Interaktion der Schoner beendet wird, ich aber auch nicht wild irgend etwas schließen möchte.

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
 
#12

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 13:22
Ich haber vermutlich hier (How to force a screen saver to close once started in Windows NT) etwas gefunden.

Ich werde das später mal ausprobieren. Habe im Moment leider keine Zeit.
Diese Darstellung bringt mich aber zurück zu meiner Frage: Wenn der ScreenSaver in einem separaten Desktop läuft, müsste es doch theoretisch möglich sein, einen Screenshot vom anderen Dekstop (also der den der Benutzer hat) zu machen, ohne den Screensaver überhaupt anfassen zu müssen. Oder sehe ich das falsch? Soll ich dazu ein neues Them aufmachen?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 16:07
Er soll meine "Bildschirme schonen", wie der Name schon sagt.
Das ist mal absoluter Quatsch.
Zur Zeit der Röhren-Monitore waren die Bildschirmschoner dazu da, das sich kein Bild einbrennt.
Aber da ich jetzt mal davon ausgehe das du keinen Röhren-Monitor hast, dienen Bildschirmschoner nur der Zierde.
Einen praktischen Nutzen haben diese dort nicht.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 16:10
Er soll meine "Bildschirme schonen", wie der Name schon sagt.
Das ist mal absoluter Quatsch.
...
Einen praktischen Nutzen haben diese dort nicht.
Wenn man nicht noch bunte Bilder als Schoner nimmt, sondern komplett dunkel, dann spart man vielleicht noch ein wenig Energie. Auch die Elemente, die die Helligkeit erzeugen, unterliegen einer Alterung (kleine Leuchstoffröhren an den Seiten der Display oder auch LED's unterliegen der Alterung.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 16:11
Dann wäre/ist das Abschalten des Bildschirms aber die bessere Alternative
Markus Kinzler
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 19:41
Dann wäre/ist das Abschalten des Bildschirms aber die bessere Alternative
Das stimmt. Aber die Mädels (meine Mitarbeiterinnen) finden es toll. Dazu gehört auch das wöchentliche Wechseln des Hintergrundbildes etc. pp.
Ich habe jetzt das hier übersetzt und es funktioniert im Grunde auch ganz gut. Aber vielleicht könnten die Profis hier mal drüberschauen, ob irgend welche groben Schnitzer drin sind. FastMM meldet jedenfalls keine memory leaks. Den vollständigen Code zum Test nebst Testprogramm habe ich als Anhang begefügt.

Delphi-Quellcode:
Procedure QuitScreenSaver;

  Function KillScreenSaverFunc(Wnd: HWnd; LParam: Word): Boolean;
  Begin
    If (IsWindowVisible(Wnd)) Then
        PostMessage(Wnd, WM_CLOSE, 0, 0);
    Result:=True;
  End;

Var
  hDesktop : hDesk;
Begin
  hDesktop:=OpenDesktop('Screen-saver', 0, False,
      DESKTOP_READOBJECTS Or DESKTOP_WRITEOBJECTS);
  If (hDesktop <> 0) Then
  Begin
    EnumDesktopWindows(hDesktop, @KillScreenSaverFunc, 0);
    CloseDesktop(hDesktop);
  End
  Else // <- Windows 2000 and later
    PostMessage(GetForeGroundWindow, WM_Close, 0, 0);
End;
Eine Sache gefällt mir allerdings noch nicht so ganz: Obwohl ich auf das Beenden des Bildschirmschoners warte, bekomme ich manchmal nur ein halbes oder verschwommenes Bild. Kann man das noch irgendwie eleganter/besser machen?

Gruß & Dank, Alex
Angehängte Dateien
Dateityp: zip QuitScreenSaver_p.zip (2,1 KB, 3x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.862 Beiträge
 
Delphi 10.1 Berlin Professional
 
#17

AW: Re: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 11. Sep 2010, 20:16
Der Bildschirmschoner entscheidet doch selber auf was er, zum Beenden, reagiert.
Meißt ist das die Bewegung des Mauszeigers, oder ein Tastendruck.
Per SendKey und Co. könnte man dann auch etwas erreichen.
...ich zitiere mal himitsu aus dem Jahre 2009. Sollte nicht ein "Tastendruck simulieren" reichen ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#18

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 13. Sep 2010, 13:35
Eventuell hilft einfach den Mauscursor per Api-Funktion (setcursorpos) zu bewegen oder zum Beispiel einen Tastendruck zu simulieren um den Bildschirmschoner zu deaktivieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#19

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 13. Sep 2010, 15:16
Also ist ja ganz schnell getestet:

Delphi-Quellcode:
Windows.SetCursorPos(0,0);
Windows.SetCursorPos(200,200);
.
beendet unter Windows XP (No Admin) den laufenden Bildschirmschoner
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

AW: Bildschirmschoner beenden aus Delphi-Anwendung

  Alt 13. Sep 2010, 15:18
Also ist ja ganz schnell getestet:

Delphi-Quellcode:
Windows.SetCursorPos(0,0);
Windows.SetCursorPos(200,200);
.
beendet unter Windows XP (No Admin) den laufenden Bildschirmschoner
Sicher? Ich kenne einen Bildschirmschoner, wo man mit der Maus über die Länder gehen konnte um die lokale Uhrzeit anzuzeigen.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf