![]() |
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Zitat:
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
Delphi-Quellcode:
einen einmal laufenden Bildschirmschoner eben nicht beendet. Wäre auch zu einfach und schön gewesen :lol:
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
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 |
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Ich haber vermutlich
![]() 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 |
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Zitat:
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. |
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Zitat:
|
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Dann wäre/ist das Abschalten des Bildschirms aber die bessere Alternative
|
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich habe jetzt ![]()
Delphi-Quellcode:
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?
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; Gruß & Dank, Alex |
AW: Re: Bildschirmschoner beenden aus Delphi-Anwendung
Zitat:
|
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Eventuell hilft einfach den Mauscursor per Api-Funktion (setcursorpos) zu bewegen oder zum Beispiel einen Tastendruck zu simulieren um den Bildschirmschoner zu deaktivieren.
|
AW: Bildschirmschoner beenden aus Delphi-Anwendung
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 |
AW: Bildschirmschoner beenden aus Delphi-Anwendung
Zitat:
MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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