Veröffentlicht 31. August 200619 j Gibt es da einen einfachen Befehl um den Lokalen PC herunterzufahren? Der Befehl sollte von 2000, XP und 2003 unterstützt werden und Nicht dazu führen, das dann "Sie können den PC jetzt ausschalten" auf dem Bildschirm stehen bleibt.
31. August 200619 j Private Declare Function ExitWindows Lib "User32" Alias "ExitWindowsEx" _ (ByVal dwOptions As Integer, _ ByVal dwReserved As Integer) As Integer Private Sub quit() ExitWindows(1, &HFFFFS) End Sub
31. August 200619 j du könntest shutdown.exe mit entsprechenden parametern von deinem programm aus aufrufen. allerdings weiss ich nicht welche betriebssysteme das unterstützen
31. August 200619 j Private Sub quit() On Error Resume Next Dim objWMI As Object Dim colItems As Object Dim objItem As Object objWMI = GetObject( _ "WinMgmts:{impersonationLevel=impersonate, " & _ "(Shutdown)}!/root/cimv2") colItems = objWMI.ExecQuery( _ "SELECT * FROM Win32_OperatingSystem") For Each objItem In colItems objItem.Shutdown() Next objItem End Sub
31. August 200619 j Danke, aber wird weder von 2000 noch 2003 ausgeführt. Und was ist die Fehlermeldung?
1. September 200619 j Und was ist die Fehlermeldung? keine! es passiert einfach nix! wobei der benutzerwechsel mit win2000 klappt! der zweite code funktioniert mit win2000
1. September 200619 j Autor Hmm, Also mit der WMI geschichte hab ich zwar den PC unter 2000 runtergefahren, Jedoch blieb er dann beim acpi-Poweroff hängen. Ich hab jetz ein kleines workarround genommen: ein aufruf der psshutdown.exe aus den sysinternals. Klappt wunderbar. Trotzdem Danke.
1. September 200619 j Hmm, Also mit der WMI geschichte hab ich zwar den PC unter 2000 runtergefahren, Jedoch blieb er dann beim acpi-Poweroff hängen. Ich hab jetz ein kleines workarround genommen: ein aufruf der psshutdown.exe aus den sysinternals. Klappt wunderbar. Trotzdem Danke. wenn du dich wenigstens ein bißchen eingearbeitet hättest, hättest du herausgefunden, dass man statt shutdown --> Win32Shutdown(12) verwenden kann; und dann klappts auch!
1. September 200619 j GetLastError liefert keine Fehlermeldung? ich meinte, wenn man das ausführt: Private Declare Function ExitWindows Lib "User32" Alias "ExitWindowsEx" _ (ByVal dwOptions As Integer, _ ByVal dwReserved As Integer) As Integer Private Sub quit() ExitWindows(1, &HFFFFS) End Sub macht windows schlichtweg nix; was andres hab ich gar ned probiert...
1. September 200619 j was andres hab ich gar ned probiert... Ich habe gefragt, ob die API-Funktion ExitWindowsEx einen Fehler signalisiert und was GetLastError, gleich im Anschluss darauf aufgerufen, zurückliefert. "Es geht nicht" ist keine Fehlerbeschreibung, auf die man sinnvoll antworten kann. Zu dem Code: Der erste Parameter sollte 0x8 sein, im Fall von 0x1 wird das System nicht ausgeschaltet. Ausserdem braucht Dein Prozess laut Dokumentation im PSDK das SE_SHUTDOWN_NAME Privileg. Dieses musst Du Dir über AdjustTokenPrivileges beschaffen. Als zweiten Parameter ist eine Auswahl zwischen 0x4 oder 0x10 (und 0, wenn keine weiteren Angaben gemacht werden sollen) dokumentiert, je nach verwendetet OS. Bitte lies die Dokumentation für genauere Angaben selbst nach.
2. September 200619 j Ich habe gefragt, ob die API-Funktion ExitWindowsEx einen Fehler signalisiert und was GetLastError, gleich im Anschluss darauf aufgerufen, zurückliefert. "Es geht nicht" ist keine Fehlerbeschreibung, auf die man sinnvoll antworten kann. Zu dem Code: Der erste Parameter sollte 0x8 sein, im Fall von 0x1 wird das System nicht ausgeschaltet. Ausserdem braucht Dein Prozess laut Dokumentation im PSDK das SE_SHUTDOWN_NAME Privileg. Dieses musst Du Dir über AdjustTokenPrivileges beschaffen. Als zweiten Parameter ist eine Auswahl zwischen 0x4 oder 0x10 (und 0, wenn keine weiteren Angaben gemacht werden sollen) dokumentiert, je nach verwendetet OS. Bitte lies die Dokumentation für genauere Angaben selbst nach. ich hab ihm doch schon mitlerweile einen funktionsfähigen code geliefert... und ich sagte auch, dass ich kein GetLastError gemacht habe...
2. September 200619 j ich hab ihm doch schon mitlerweile einen funktionsfähigen code geliefert... Ich beziehe mich nicht auf das Beispiel unter Verwendung von WMI. Der Aufruf von ExitWindowsEx, so wie Du ihn alleine gepostet hast, reicht nicht. und ich sagte auch, dass ich kein GetLastError gemacht habe... Hättest Du es getan, wäre aufgefallen, dass GetLastError nach em Aufruf von ExitWindowsEx den Fehlercode 1314 zurückliefert. Dies, zusammen mit der Dokumentation von ExitWindowsEx, sollte ausreichen, um das Problem anzugehen.
2. September 200619 j Hättest Du es getan, wäre aufgefallen, dass GetLastError nach em Aufruf von ExitWindowsEx den Fehlercode 1314 zurückliefert. Dies, zusammen mit der Dokumentation von ExitWindowsEx, sollte ausreichen, um das Problem anzugehen. welches nicht meines ist.... wenn er sich nicht selbst die mühe macht ist es mir egal! ich debugge doch nicht auch noch für jemanden, wenn er 90% schon auf dem teller serviert bekommt
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.