Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PC runterfahren

PC runterfahren
Mister
Hallo,
ich habe viel gesucht aber leider nichts passendes gefunden. Vielleicht kann mir hier geholfen werden. Ich möchte um 20:25, per Makro in der aktuellen Datei Uhr einen Hinweis geben, dass der PC in zwei Minuten heruntergehfaren wird. Währen dieser Zeit soll einer Uhr runterlaufen. Nach Ablauf der Zeit soll der PC runtergefahren werden. Geht das überhaupt?
Gruß
Martin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: PC runterfahren
Dirk
Hallo,
klar geht das.
Hier ein link zu einer Prozedur, wie das zu Bewerkstelligen ist.
http://www.vbaexpress.com/kb/getarticle.php?kb_id=515
Fuer die Meldung und die Anzeige des countdown timers musst Du noch eine entsprechende Prozedur bereitstellen, nach deren ablauf diese Prozedur gestartet wird. Dazu mal 'vba excel countdown timer vbmodeless' googlen.
Hier mal ein Beispiel:
http://www.tushar-mehta.com/excel/software/vba_timer/
Gruss
Dirk aus Dubai
Anzeige
AW: PC runterfahren
25.04.2010 18:59:10
Mister
Hallo Dirk,
danke für die beiden Links. Ich habe es soweit, dass der PC jetzt herunterfährt. An die Uhr muss ich noch basteln. Danke für deine Hilfe.
Gruß
Martin
lass uns/mich doch teilhaben ...
25.04.2010 22:21:22
Matthias
Hallo
... ich habe es soweit, dass der PC jetzt herunterfährt
Wie hast Du es denn nun gelöst (zeig uns doch mal den Code), ist auch für Andere evtl. interessant.
Gruß Matthias
hier eine Version ...
26.04.2010 08:46:56
Tino
Hallo,
die ich mal im über Google gefunden habe.
Private Type LUID
  LowPart As Long
  HighPart As Long
End Type

Private Type TOKEN_PRIVILEGES
  PrivilegeCount As Long
  LuidUDT As LUID
  Attributes As Long
End Type

Private Declare Function AdjustTokenPrivileges Lib "advapi32" ( _
    ByVal TokenHandle As Long, _
    ByVal DisableAllPrivileges As Long, _
    ByRef NewState As TOKEN_PRIVILEGES, _
    ByVal BufferLength As Long, _
    ByRef PreviousState As Any, _
    ByRef ReturnLength As Any _
  ) As Long
Private Declare Function ExitWindowsEx Lib "user32" ( _
    ByVal dwOptions As Long, _
    ByVal dwReserved As Long _
  ) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" ( _
  ) As Long
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValueA Lib "advapi32" ( _
    ByVal lpSystemName As String, _
    ByVal lpName As String, _
    ByRef lpLuid As LUID _
  ) As Long
Private Declare Function OpenProcessToken Lib "advapi32" ( _
    ByVal ProcessHandle As Long, _
    ByVal DesiredAccess As Long, _
    ByRef TokenHandle As Long _
  ) As Long
  

Public Sub ShutDown(Optional ByVal Reboot As Variant = 1, _
                    Optional ByVal Force As Boolean = False)
  Const EWX_LOGOFF = 0
  Const EWX_SHUTDOWN = 1 'Neustart 
  Const EWX_REBOOT = 2
  Const EWX_FORCE = 4
  Const EWX_POWEROFF = 8
  Const SE_PRIVILEGE_ENABLED = &H2
  Const TOKEN_ADJUST_PRIVILEGES = &H20
  Const TOKEN_QUERY = &H8
  
  Dim Flags As Long
  Dim Token As Long
  Dim TP As TOKEN_PRIVILEGES
  
  'WinNT/2000 benötigt spezielle Rechte: 
  If GetVersion() >= 0 Then
    OpenProcessToken _
        GetCurrentProcess(), _
        TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, Token
    LookupPrivilegeValueA _
        "", "SeShutdownPrivilege", TP.LuidUDT
    TP.PrivilegeCount = 1
    TP.Attributes = SE_PRIVILEGE_ENABLED
    AdjustTokenPrivileges _
        Token, False, TP, 0, ByVal 0&, ByVal 0&
  End If
  
  'Shutdown durchführen: 
  Flags = EWX_POWEROFF
  
If Reboot = 2 Then
    Flags = Flags Or EWX_REBOOT
  ElseIf Reboot = 0 Then
    Flags = EWX_LOGOFF
  ElseIf Reboot = 8 Then
    Flags = EWX_POWEROFF
  ElseIf Reboot = &H2 Then
    Flags = SE_PRIVILEGE_ENABLED
  ElseIf Reboot = &H8 Then
    Flags = TOKEN_QUERY
  Else
    Flags = EWX_FORCE
End If
  
'  If Force Then Flags = Flags Or EWX_FORCE 
  ExitWindowsEx Flags, &HFFFF
End Sub


Sub test()
'0 = Abmelden 
'2 = Neustart 
'8 = Ausschalten 
'&H2 = Ausschalten ohne aus? 
'&H8 = Ausschalten 
ShutDown 2, False
SaveChanges = True
Application.Quit
End Sub
Gruß Tino
Anzeige
ok, Danke Tino ...
26.04.2010 09:51:03
Matthias

Hallo
... aber ich wollte eigentlich nur Martin seine Umsetzung sehen.
Ich mach das so:

Option Explicit

Private Sub Workbook_Open()
 Application.OnTime TimeValue("20:25:00"), "runterfahren"
End Sub

Sub runterfahren()
Dim MyTimer
 MyTimer = Shell("shutdown -s -t 120")
 Application.Run MyTimer
End Sub

OnTime TimeValue("20:25:00") , sowie [t 120] muß natürlich individuell angepasst werden.
Wenn Du es testen willst, setze [t auf 10]
Shell("shutdown -s -t 10") sonst musst Du 120 Sek warten ;o)
Achtung es ist kein Abbruch möglich! Also beende vorher alle Anwendungen.
zum OnTime zurücksetzen, benutze ich ...

 Application.OnTime EarliestTime:=TimeValue("20:25:00"), Procedure:="runterfahren", Schedule:=False
Trotzdem ... Danke Tino für Deine Mühe
Ich hoffe Du hattest nicht zuviel Arbeit mit der Suche.
Gruß Matthias
Anzeige
AW: ok, Danke Tino ...
26.04.2010 11:22:16
Tino
Hallo,
nein hatte keine Mühe, habe ich als Testdatei bei mir auf dem Rechner, habe nur den Code kopiert.
Die Dos Variante kenne ich auch, die hatte nur mal auf einen Firmenrechner aus
irgendwelchen Gründen nicht funktioniert.
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige