Benutzer mit den meisten Antworten
ScreenSaver: Wie kann man dem System den zu nutzenden ScreenSaver DEFINIEREN?

Frage
-
Hallo zusammen,
zu folgender Problematik finde ich via Google auch keine Lösung:
Es gibt jede Menge Programmierung anzuschauen, wie der Screensaver zu aktivieren/deaktivier, zu starten geht und wie man selbst einen bastelt. Aber nirgends fand ich einen Vorschlag, wie man mit dem eigenen Program für das System festlegen kann, dass der Screensaver "SoUndSo" eben ab Zeitpunkt der Programmausführung der ScreenSaver für das System sein soll. Also quasi "ändern des aktuellen Screensavers zu einem anderen".
Hat hier jemand eine Idee dazu?
Grüße-
Dietrich
Antworten
-
Hallo,
folgender Code führt zum Erfolg:
Dim startInfo As New ProcessStartInfo("rundll32.exe") With startInfo .Arguments = "desk.cpl,InstallScreenSaver " + scrPath + scrName .WindowStyle = ProcessWindowStyle.Hidden End With Process.Start(startInfo).WaitForExit(900) hWnd = FindWindow("#32770", "Bildschirmschonereinstellungen") SendMessage(hWnd, WM_NCDESTROY, 0, 0)
Entscheidend sind das WaitForExit und das WM_NCDESTROY...
Jetzt wird der Bildschirmschoner geändert, ohne dass man den Dialog sieht.Grüße-
Dietrich
Alle Antworten
-
Hallo Dietrich,
In folgendem Thread gibt es einen Beispielcode, der mithilfe der Windows-Funktion SystemParametersInfo die Änderung des Screensavers bewirkt, und ich hoffe, dass er Dir weiterhelfen wird:
How do I change the screensaver programatically?Der Code ist zwar in C#, aber er lässt sich mit einem Konverter nach Visual Basic.NET konvertieren.
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Danke für den Tipp, Dimitar!
Ich habe ca. 25 Screensavers und alle haben Namen von ca. 30 Zeichen Länge, die ich NICHT einkürzen möchte (was aber Bedingung in dem Tipp zu sein scheint). Außerdem: Änderung an der Registry bedingt wohl stets Neustart des Computers, damit sie wirksam wird?
Mittlerweile habe ich eine kleine Lösung gefunden, die allerdings noch nicht ganz zufriedenstellend ist.
s = "rundll32.exe desk.cpl,InstallScreenSaver " + scrPath + scrName WinExec(s, SW_HIDE) SendKeys.Send("{ENTER}")
mit s, scrPath, scrName AS String. Dabei muss ich scrPath explizit angeben, weil meine Savers in SysWOW64 liegen.
Wenn man das anwendet wird der gewünschte Saver sozusagen definiert, das Dialogfenster der "Bildschirmschonereinstellungen" blinkt trotz SW_Hide kurz auf. Und die Lösung mit dem SendKeys ist auch nicht sehr praktisch, denn das Ganze funktioniert nur, wenn man nichts anderes macht, also der Focus auf dem Dialogfenster bleibt...Wäre gut, wenn jemand gerade für das Sendkeys (es ist quasi der Klick auf den OK-Button des Dialogs) eine andere Lösung vorschlagen könnte!
Grüße-
Dietrich
- Bearbeitet dherrmann Montag, 20. November 2017 08:46
-
Am 16.11.2017 schrieb dherrmann:
System festlegen kann, dass der Screensaver "SoUndSo" eben ab Zeitpunkt der Programmausführung der ScreenSaver für das System sein soll. Also quasi "ändern des aktuellen Screensavers zu einem anderen".
In den GPOs (Registry) via Taskplaner ändern, wäre eine Option. Die
hat zwar wenig bis gar nichts mit VS zu tun. ;)Servus
Winfried
WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/
HowTos zum WSUS Package Publisher http://www.wsus.de/wpp
GPO's: http://www.gruppenrichtlinien.de
NNTP-Bridge für MS-Foren: http://communitybridge.codeplex.com/ -
Hallo zusammen!
Ich habe noch einen weiteren Versuch/andere Methode unternommen mit:
Dim startInfo As New ProcessStartInfo("rundll32.exe") With startInfo .Arguments = "desk.cpl,InstallScreenSaver " + scrPath + scrName .WindowStyle = ProcessWindowStyle.Hidden .CreateNoWindow = True End With Process.Start(startInfo)
Funktioniert auch. Allerdings haben die Befehle "WindowStyle" und "CreateNoWindow" keine Auswirkung. Das Dialogfenster "Bildschirmschonereinstellungen" wird geöffnet!!
Und den Prozessnamen kann ich auch nicht ermitteln...Hat jemand einen Tipp, wie man dieses Fenster wieder via Programm schließen kann?
Habe ausprobiert, das Handle zu finden mit:
Dim hWnd As IntPtr = FindWindow("#32770", "Bildschirmschonereinstellungen")
Ohne Erfolg........
Grüße-
Dietrich
- Bearbeitet dherrmann Mittwoch, 22. November 2017 10:55
-
Hallo,
folgender Code führt zum Erfolg:
Dim startInfo As New ProcessStartInfo("rundll32.exe") With startInfo .Arguments = "desk.cpl,InstallScreenSaver " + scrPath + scrName .WindowStyle = ProcessWindowStyle.Hidden End With Process.Start(startInfo).WaitForExit(900) hWnd = FindWindow("#32770", "Bildschirmschonereinstellungen") SendMessage(hWnd, WM_NCDESTROY, 0, 0)
Entscheidend sind das WaitForExit und das WM_NCDESTROY...
Jetzt wird der Bildschirmschoner geändert, ohne dass man den Dialog sieht.Grüße-
Dietrich