User Tools

Site Tools


k15:k15.1:k15.1.3:start

15.1.3 Property ScreenSaver - Class Desktop (gb. desktop)

Behind the property Screensaver is the class _Desktop_ScreenSaver (gb.desktop). The class enables you to manage the power management and screen saver of the monitor. This virtual class has one Enabled property and 5 methods (Activate, Lock, Reset, Resume and Suspend).

  • The effect of the Suspend (Window AS Window) procedure is to override the screen saver function and the power management of the monitor. As a condition: The specified window must exist for the duration of the suspension/interruption.
  • The screen saver can be suspended simultaneously with multiple windows. In this case, the screensaver operation is restored only once.

By calling the Resume (Window AS Window) method, the screen saver function and the power management of the monitor are reactivated after they have been exposed. The window passed as a parameter must be the same as it was when you called the Suspend method (Window AS Window) before.

After calling Desktop.ScreenSaver.Suspend(FMain.Window) in a project source code, this message appears in the IDE console:

lockfile: Forcing lock on "/tmp/xdg-screensaver-hans--0.0.lock"

with the contents of the lock file /tmp/xdg-screensaver-hans–0.0:

52428803:7751

In one project, both the enabled property and the 5 methods (Activate, Lock, Reset, Resume and Suspend) were used to test their effect.

B1

Figure 15.1.3.1: 'ScreenSaver' project

This is followed by the complete source code, the most important passages of which are commented:

[1] ' Gambas class file
[2] 
[3] Public Sub Form_Open()
[4]   Dim bFlag As Boolean
[5]   
[6]   FMain.Center
[7]   FMain.Resizable = False
[8]   Desktop.ScreenSaver.Suspend(FMain.Window)
[9] 
[10]   ' bFlag = Desktop.ScreenSaver.Enabled
[11]   ' If bFlag = True Then
[12]   '    Message.Info("Desktop screen saver switched on.")
[13]   ' Else
[14]   '    Message.Info("Desktop screen saver switched off.")
[15]   ' Endif ' If bFlag = True ?
[16]   
[17] End ' Form_Open()
[18] 
[19] Public Sub btnDSSActivate_Click()
[20]   Desktop.ScreenSaver.Activate()  
[21] End ' btnDSSActivate_Click()  
[22] 
[23] Public Sub btnDSSLock_Click()
[24]   Desktop.ScreenSaver.Lock()
[25] End ' btnDSSLock_Click()
[26] 
[27] Public Sub btnDSSTest_Click()
[28]   Desktop.ScreenSaver.Resume(FMain.Window)
[29]   Desktop.ScreenSaver.Activate()
[30]   timerDSSWait.Delay = 1000 * 3
[31]   timerDSSWait.Start
[32] End ' btnDSSTest_Click()
[33] 
[34] Public Sub timerDSSWait_Timer()
[35]   Desktop.ScreenSaver.Reset()
[36]   Desktop.ScreenSaver.Suspend(FMain.Window)
[37]   timerDSSWait.Stop
[38] End ' timerWait_Timer()
[39] 
[40] Public Sub btnEnde_Click()
[41]   Desktop.ScreenSaver.Resume(FMain.Window)
[42]   Wait 0.05
[43]   FMain.Close
[44] End ' btnEnde_Click()
[45] 
[46] Public Sub Form_Close()
[47]    btnEnde_Click()
[48] End ' Form_Close()

Comment:

  • The lines 10-15 were commented out because of an error message: _Desktop_ScreenSaver.Enabled is static.
  • By calling the method in line 20, the screen saver is switched on immediately. A lockout depends on the system settings. Each activity turns off the screensaver immediately.
  • The method in line 24 blocks the screen immediately. The user password is required for unlocking.
  • In lines 27 to 38, the screen is switched on for a defined period of time. The lockout time of 3 seconds specified here is set via a timer.
  • In the procedure in lines 40-48 without a 'Wait 0.05' there was an error in the IDE-console (xdg-screensaver: Window 52428803 does not exist), because the form may not be closed before the screensaver was reactivated! Look - the short waiting time of 0.05 seconds seems to help.

Download

15.1.3 Eigenschaft ScreenSaver – Klasse Desktop (gb.desktop)

Hinter der Eigenschaft Screensaver steht die Klasse _Desktop_ScreenSaver (gb.desktop). Die Klasse setzt Sie in die Lage, die Energieverwaltung und den Bildschirmschoner des Monitors zu verwalten. Diese virtuelle Klasse hat eine Eigenschaft Enabled und 5 Methoden (Activate, Lock, Reset, Resume und Suspend).

  • Die Wirkung der Prozedur Suspend(Window AS Window) besteht darin, die Bildschirmschoner-Funktion und die Energieverwaltung des Monitors außer Kraft zu setzen. Als Bedingung gilt: Das angegebene Fenster muss für die Dauer der Aussetzung/Unterbrechung existieren.
  • Der Bildschirmschoner kann im Zusammenhang mit mehreren Fenstern gleichzeitig ausgesetzt werden. In diesem Fall wird die Bildschirmschoner-Operation nur einmal wiederhergestellt.

Mit dem Aufruf der Methode Resume(Window AS Window) werden die Bildschirmschoner-Funktion und die Energieverwaltung des Monitors wieder aktiviert, nachdem sie ausgesetzt waren. Das als Parameter übergebene Fenster muss das gleiche sein, das bei einem vorangegangenen Aufruf der Methode Suspend(Window AS Window) wurde.

Nach dem Aufruf von Desktop.ScreenSaver.Suspend(FMain.Window) in einem Projekt-Quelltext erscheint diese Meldung in der IDE-Konsole:

lockfile: Forcing lock on "/tmp/xdg-screensaver-hans--0.0.lock"

mit dem Inhalt der Sperr-Datei /tmp/xdg-screensaver-hans–0.0:

52428803:7751

In einem Projekt wurden sowohl die Eigenschaft Enabled als auch die 5 Methoden (Activate, Lock, Reset, Resume und Suspend) eingesetzt, um deren Wirkung zu erproben.

B1

Abbildung 15.1.3.1: Projekt 'ScreenSaver'

Es folgt der komplette Quelltext, dessen wichtigste Passagen kommentiert werden:

[1] ' Gambas class file
[2] 
[3] Public Sub Form_Open()
[4]   Dim bFlag As Boolean
[5]   
[6]   FMain.Center
[7]   FMain.Resizable = False
[8]   Desktop.ScreenSaver.Suspend(FMain.Window)
[9] 
[10]   ' bFlag = Desktop.ScreenSaver.Enabled
[11]   ' If bFlag = True Then
[12]   '    Message.Info("Desktop-Bildschirmschoner eingeschaltet.")
[13]   ' Else
[14]   '    Message.Info("Desktop-Bildschirmschoner ausgeschaltet.")
[15]   ' Endif ' If bFlag = True ?
[16]   
[17] End ' Form_Open()
[18] 
[19] Public Sub btnDSSActivate_Click()
[20]   Desktop.ScreenSaver.Activate()  
[21] End ' btnDSSActivate_Click()  
[22] 
[23] Public Sub btnDSSLock_Click()
[24]   Desktop.ScreenSaver.Lock()
[25] End ' btnDSSLock_Click()
[26] 
[27] Public Sub btnDSSTest_Click()
[28]   Desktop.ScreenSaver.Resume(FMain.Window)
[29]   Desktop.ScreenSaver.Activate()
[30]   timerDSSWait.Delay = 1000 * 3
[31]   timerDSSWait.Start
[32] End ' btnDSSTest_Click()
[33] 
[34] Public Sub timerDSSWait_Timer()
[35]   Desktop.ScreenSaver.Reset()
[36]   Desktop.ScreenSaver.Suspend(FMain.Window)
[37]   timerDSSWait.Stop
[38] End ' timerWait_Timer()
[39] 
[40] Public Sub btnEnde_Click()
[41]   Desktop.ScreenSaver.Resume(FMain.Window)
[42]   Wait 0.05
[43]   FMain.Close
[44] End ' btnEnde_Click()
[45] 
[46] Public Sub Form_Close()
[47]    btnEnde_Click()
[48] End ' Form_Close()

Kommentar:

  • Die Zeilen 10-15 wurden auskommentiert, weil es eine Fehlermeldung gab: _Desktop_ScreenSaver.Enabled ist statisch.
  • Mit dem Aufruf der Methode in der Zeile 20 wird der Bildschirmschoner sofort eingeschaltet. Eine Sperrung hängt von den System-Einstellungen ab. Jede Aktivität schaltet den Bildschirmschoner sofort aus.
  • Die Methode in der Zeile 24 sperrt den Bildschirm sofort. Zum Entsperren wird das Benutzer-Passwort benötigt.
  • In den Zeilen 27 bis 38 wird der Bildschirm für eine definierte Zeitspanne eingeschaltet. Die hier fest vorgegebene Sperrzeit von 3 Sekunden wird über einen Timer eingestellt.
  • In der Prozedur in den Zeilen 40-48 ergab sich ohne ein 'Wait 0.05' ein Fehler in der IDE-Konsole (xdg-screensaver: Window 52428803 does not exist), weil das Formular nicht geschlossen werden darf, bevor der Bildschirmschoner wieder aktiviert wurde! Die kurze Wartezeit von 0,05 Sekunden scheint zu helfen.

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k15/k15.1/k15.1.3/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools