Autor Beitrag
GR-Thunderstorm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 05.06.06 16:24 
Mit der Suche wärest du auf das hier gestoßen ;)
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: Mo 05.06.06 17:42 
Das hier sollte reichen:
ausblenden Delphi-Quelltext
1:
ExitWindowsEx (EWX_SHUTDOWN, $FFFFFFFF);					

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: Mo 05.06.06 17:52 
Bei mir passiert leider nichts wenn ich diesen Befehl so einbaue.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExitWindowsEx (EWX_SHUTDOWN, $FFFFFFFF);
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 06.06.06 04:44 
user profile iconGR-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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: Di 06.06.06 17:15 
Ich hab Windows XP und nicht NT...
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Di 06.06.06 17:54 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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;

  // Die Windowsversion holen
  OSVersionInfo.dwOSVersionInfoSize := SizeOf (OSVersionInfo);
  if not GetVersionEx (OSVersionInfo) then
    Exit;

  // Prüfen ob Windows NT
  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.



user profile iconGR-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



BeitragVerfasst: Mi 07.06.06 23:09 
user profile iconGR-Thunderstorm hat folgendes geschrieben:
Ich hab Windows XP und nicht NT...

Das ist eiegntlich schon reif für eine Signatur. :mrgreen:
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: Do 08.06.06 15:47 
Es kann ja nich jeder alles wissen.. :roll:
Querkopf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

Win XP SP2
Turbo Delphi 2006 Explorer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 20.06.06 23:27 
user profile iconLuckie hat folgendes geschrieben:
Das ist eiegntlich schon reif für eine Signatur. :mrgreen:

Nja, nicht jeder kennt sich halt so gut aus. ;-)

_________________
Ein Nutzer der Ecke ;-)