Autor |
Beitrag |
GR-Thunderstorm
      
Beiträge: 206
|
Verfasst: Mo 05.06.06 16:15
Hi!
Ich will mir einen kleinen Timer bauen, der meinen PC nach einer bestimmten Zeit ausschaltet. Gibt es einen Befehl, der Windows den PC herunterfahren lässt?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 05.06.06 16:24
Mit der Suche wärest du auf das hier gestoßen 
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 05.06.06 17:37
Da seh ich irgendwie nich durch...
Soweit ich jetzt erkennen kann ist der finale Befehl.. ShutdownWindows := ExitWindowsEx (cFlagValue [aType], $FFFFFFFF);
Aber der Rest ist ein Rätsel für mich.. ^^
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Mo 05.06.06 17:42
Das hier sollte reichen:
Delphi-Quelltext 1:
| ExitWindowsEx (EWX_SHUTDOWN, $FFFFFFFF); |
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 05.06.06 17:52
Bei mir passiert leider nichts wenn ich diesen Befehl so einbaue.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ExitWindowsEx (EWX_SHUTDOWN, $FFFFFFFF); end; |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 06.06.06 04:44
GR-Thunderstorm hat folgendes geschrieben: | Bei mir passiert leider nichts wenn ich diesen Befehl so einbaue. |
Und du wüßtest auc warum, wenn du dir den verlinkten Beitrag mal genauer angesehen hättest:
Zitat: | Unter Windows NT muss zusätzlich mit der Win32 API Funktion AdjustTokenPrivileges noch das Privileg SE_SHUTDOWN_NAME gesetzt werden, ansonsten lässt sich ExitWindowsEx nicht erfolgreich ausführen. |
Und wie man das macht in Verbindung mit dem Runterfahren wird dort ausführlich erklärt.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 06.06.06 17:15
Ich hab Windows XP und nicht NT...
|
|
rizla
      
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: Di 06.06.06 17:18
_________________ if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 06.06.06 17:33
Cool danke..
Jetzt zermürbt mich nur, dass ich nich weiß wie das funzt. Steht ja kein Quellcode da... 
|
|
Born-to-Frag
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: Di 06.06.06 17:54
Delphi-Quelltext 1: 2: 3:
| uses ShellAPI; ... ShellExecute(0, 'open', 'shutdown.exe', '-s -t 0', nil, SW_NORMAL); |
_________________ Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 06.06.06 18:05
Ach da is die Datei die Windows runterfahren lässt.. -.-
Nach der Shutdown.exe hab ich schon ewig gesucht (wusste nich ma dass die so heißt...)
Danke Leute! 
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mi 07.06.06 10:18
oh gott, nein! das ist die stilloseste Variante, die es gibt. das ist ungefähr so, als ob ein programm dateien mit hilfe von ShellExecute über den copy-befehl kopiert, anstatt CopyFile zu benutzen. Dieses Programm wird nur unter Windows XP oder Server2003 laufen, selbst unter 2000 nur mit den Support Tools oder Resource Kit (zumindest bei mir gibts shutdown.exe erst seit der Installation vom Reskit). Woanders gibts die shutdown.exe nämlich nicht.
Wo liegt beim oben geposteten link das problem?
einfach dashier in die unit kopieren:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| type TShutdownWindowsType = (swtShutdown, swtShutdownPowerOff, swtRestart, swtLogoff); function ShutdownWindows (aType: TShutdownWindowsType): Boolean;
const cSE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; cFlagValue: Array [TShutdownWindowsType] Of UINT = ( EWX_SHUTDOWN, EWX_SHUTDOWN or EWX_POWEROFF, EWX_REBOOT, EWX_LOGOFF );
var OSVersionInfo: TOSVersionInfo; hToken: THandle; hProcess: THandle; TokenPriv: TTokenPrivileges; ReturnLength: DWORD;
begin Result := False;
OSVersionInfo.dwOSVersionInfoSize := SizeOf (OSVersionInfo); if not GetVersionEx (OSVersionInfo) then Exit;
if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then begin hProcess := GetCurrentProcess; if not OpenProcessToken (hProcess, TOKEN_ADJUST_PRIVILEGES, hToken) then Exit;
if not LookupPrivilegeValue (nil, cSE_SHUTDOWN_NAME, TokenPriv.Privileges[0].Luid) then Exit;
TokenPriv.PrivilegeCount := 1; TokenPriv.Privileges [0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges ( hToken, False, TokenPriv, 0, PTokenPrivileges (nil)^, ReturnLength ) then Exit;
CloseHandle (hToken); end;
ShutdownWindows := ExitWindowsEx (cFlagValue [aType], $FFFFFFFF); end; |
Und dann nur noch ShutdownWindows(swtShutdown) aufrufen.
GR-Thunderstorm hat folgendes geschrieben: | Ich hab Windows XP und nicht NT... |
Windows 2000 ist Windows NT 5.0.
Windows XP ist Windows NT 5.1.
Windows Server 2003 ist Windows NT 5.2.
Windows Vista ist Windows NT 5.3.
Und Windows Codename Blackcomb wird vielleicht 6.0 sein.
Guckste hier: www.winhistory.de
Ach ja, und der gepostete Quelltext muss natürlich über der Prozedur stehen, von der er verwendet wird. Und uses muss windows beinhalten.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 07.06.06 23:09
GR-Thunderstorm hat folgendes geschrieben: | Ich hab Windows XP und nicht NT... |
Das ist eiegntlich schon reif für eine Signatur. 
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Do 08.06.06 15:47
Es kann ja nich jeder alles wissen.. 
|
|
Querkopf
      
Beiträge: 31
Win XP SP2
Turbo Delphi 2006 Explorer
|
Verfasst: Di 20.06.06 22:44
Hallo,
ich habe jetzt noch eine ergänzende Frage zum Thema herunterfahren. Hab mir schon die zig Threads dazu angeschaut, aber meine Problematik scheint nirgends aufgetreten zu sein.
Es geht darum, beim Default-User einen Bildschirmschoner einzutragen, der nach x Minuten gestartet wird. Ist an einem Rechner nun niemand angemeldet, erscheint nach x Minuten dieser Bildschirmschoner. Mein Problem ist, dass sich der Rechner in abgemeldetem Zustand nicht herunterfahren läßt. Der Bildschirmschoner in angemeldetem Zustand verrichtet seine Dinge wie er soll.
Ich nutze die allgemein beschriebene ExitWindowsEx-Prozedur unter Windows XP.
Gruß,
Pierre
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Di 20.06.06 23:27
_________________ Ein Nutzer der Ecke
|
|