Ich habe mal versucht, mein Programm, wenn es sozusagen auf dem Desktop dahin dämmert und nichts zu tun hat, einfach abzuschalten. Dazu habe ich im Programm zwei Timer definiert: Dim WithEvents halfTime As Timer ' die halbe Wartezeit Dim WithEvents idleTimer As Timer ' die Wartezeit Im Load-Ereignis der Startform initialisiere ich diese Timer: idleTimer = New Timer() With {.Interval = 180000, .Enabled = True} ' 3 min AddHandler Application.Idle, AddressOf Application_Idle halfTime = New Timer() With {.Interval = idleTimer.Interval / 3, .Enabled = False} Das bedeutet: Hier jetzt das Ereignis für die halbe Wartezeit: Private Sub halfTime_Tick(sender As Object, e As EventArgs) _ Handles halfTime.Tick If WindowState <> FormWindowState.Minimized Then WindowState = FormWindowState.Minimized End If halfTime.Enabled = False End Sub Wenn die halbe Idle-Time (Wartezeit) vergangen ist, wird erst mal das Fenster der Startform minimiert. Ist die gesamte Idle-Time vergangen, also wurde mit dem Programm keine Bedien-Aktion mehr vorgenommen, wird die Funktion 'Application_Idle' ausgeführt: Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs) With idleTimer .Stop() .Start() If WindowState <> FormWindowState.Minimized Then halfTime.Enabled = True End If End With End Sub Der Code für den Timer idleTimer führt dann die endgültige Aktion aus: ' der Timer für das Idle-Verhalten Private Sub idleTimer_Tick(sender As Object, e As EventArgs) _ Handles idleTimer.Tick With idleTimer .Stop() .Dispose() End With RemoveHandler Application.Idle, AddressOf Application_Idle Close() Application.Exit() End Sub D.h.: Wenn die gesamte Idle-Time vergangen ist, wird die Application beendet. |