Wie Sie einen Bildschirmschoner auf einmal schließen zu zwingen, die in Windows NT, Windows 2000 und Windows Server 2003 gestartet

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 140723
Zusammenfassung
Manchmal müssen Anwendungen einen Bildschirmschoner zu beenden, der bereits ausgeführt wird. In Microsoft Windows 95 konnte ein Bildschirmschoner einfach beendet werden durch die Buchung einer WM_CLOSE-Meldung an das aktive Bildschirm Bildschirmschoner Fenster wie in diesem Beispiel:
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0 L);
Microsoft Windows NT, führt das Konzept von separaten Desktops jedoch, so dass Anwendungen auf einem ausgeführt können und Bildschirmschoner können auf einem anderen ausführen. Dies erschwert Bildschirm Bildschirmschoner Beendigung unter Windows NT, Windows 2000 und Windows Server 2003 ein wenig.
Weitere Informationen
Der Prozess ein Handle für den aktiven Bildschirm Bildschirmschoner Fenster zu erhalten, ist für Betriebssysteme, die höher als Microsoft Windows 95 sind unterschiedlich. Unter Windows NT, unter Microsoft Windows 2000 und unter Microsoft Windows Server 2003 kann der Bildschirmschoner auf dem Standarddesktop oder auf einer separaten Desktop abhängig von einer Einstellung in den Eigenschaften von Anzeige ausgeführt:
  • Wenn Sie auf der Registerkarte Bildschirmschoner im Dialogfeld Anzeigeeigenschaften das Kontrollkästchen Kennwortschutz bei Wiederaufnahme auswählen, wird der Bildschirmschoner auf seinen eigenen Desktop ausgeführt.
  • Wenn Sie das Kontrollkästchen, die in den vorherigen Punkt beschrieben ist deaktivieren, wird der Bildschirmschoner auf dem Standarddesktop ausgeführt.
Sie können keine verwenden Sie die GetForegroundWindow() -Funktion oder FindWindow Funktion zum Bestimmen, ob der Bildschirmschoner aktiv ist:
  • Die GetForegroundWindow() -Funktion gibt NULL zurück, da der Bildschirmschoner auf einem anderen Desktop auf dem Desktop ausgeführt wird, auf denen die aufrufende Anwendung ausgeführt wird.
  • Die Funktion FindWindow ("WindowsScreenSaverClass", NULL) ist entweder nicht funktionsfähig.
Microsoft empfiehlt daher die folgenden:
  • Code zum Schließen des Bildschirmschoners bestimmt zunächst, ob der Bildschirmschoner auf seinen eigenen Desktop ausgeführt wird.
  • Wenn der Bildschirmschoner auf seinen eigenen Desktop ausgeführt wird, schließt der Code den Bildschirmschoner.
  • Wenn kein Desktop für den Bildschirmschoner vorhanden ist, verwendet den Code der Standarddesktop.


Dazu erhalten Sie ein Handle für den Bildschirmschoner-Desktop, Auflisten von Fenstern des Desktops und buchen Sie ein WM_CLOSE zum Bildschirm Bildschirmschoner Fenster.

Der folgende Code veranschaulicht, wie dies tun. Beachten Sie, wenn ein Bildschirmschonerkennwort festgelegt ist, der folgende Code das Dialogfeld Kennwort öffnet, den Benutzer ein Kennwort fordert und dann tatsächlich der Bildschirmschoneranwendung beendet.
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) { 	if(IsWindowVisible(hwnd)) 		PostMessage(hwnd, WM_CLOSE, 0, 0); 	return TRUE; } HDESK hdesk; hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); if (hdesk) { 	EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);	CloseDesktop(hdesk); } else { 	// Windows 2000 and later: 	// If there is no screen saver desktop, the screen saver 	// is on the default desktop. Close it by sending a 	// WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); } 
beachten, dass das Beenden eines Bildschirmschoners, auf dem bereits ausgeführt wird, wie oben gezeigt vollkommen getrennt von den Bildschirmschoner, ganz deaktivieren, ist sodass kein Bildschirmschoner gestartet wird nach Ablauf der festgelegten Zeitspanne. Dies kann problemlos mit durchgeführt werden:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,                      FALSE,                      0,                      SPIF_SENDWININICHANGE                     );				
diese Methode eignet sich für den aktuell ausgeführten Bildschirmschoner beendet. Allerdings ist ein Problem, die auftreten können, dass das System nicht neu den Bildschirmschoner gestartet wird, wenn der Benutzer die Maus bewegt oder eine Taste drückt. Wenn Sie den Bildschirmschoner, um erneut zu starten, müssen Sie das Timeout neu zu initialisieren. Verwenden Sie hierzu eine der folgenden Methoden:
  • Aufrufen von SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, WAHR, 0, SPIF_SENDWININICHANGE).
  • Verwenden SetCursorPos() , um Benutzereingaben zu simulieren.
Beide Methoden werden bewirken, dass das System den Timeout-Zähler für den Bildschirmschoner neu zu starten.
Deaktivieren Sie unter Bildschirmschoner deaktivieren deaktivieren beenden

Warnung: Dieser Artikel wurde automatisch übersetzt.

Vlastnosti

ID článku: 140723 - Poslední kontrola: 02/22/2007 04:02:17 - Revize: 3.2

Microsoft Win32 Software Development Kit (SDK) 3.1

  • kbmt kbcode kbhowto kbscreensaver KB140723 KbMtde
Váš názor