Entwickler-Ecke
Windows API - WinXP herunterfahren
tmkb - So 23.06.02 01:19
Titel: WinXP herunterfahren
Hallo,
Kann mir jemand sagen wie man einen WinXP PC herunterfährt? am besten einen Code, bei dem herunterfahren für 95/95 gleich mitdrin ist, also dass das Programm jedes OS herunterfahren kann. wäre euch dankbar wenn es mir jemand recht ausführlich erklären könnte, thx!
tmkb
tmkb - Di 25.06.02 17:31
thx, aber is dochn recht langer code...ich hab hier im edh auch den gefunden, nur krieg ich den nicht gestartet...zitat:
begin->
Windows 95/98/NT/2000 ShutDown
Der erste Parameter ist der String, der in der MessageBox erscheint. Wenn dieser Parameter leer ist, kommt auch keine Meldung. Dem zweiten Parameter muss ein Flag übergeben werden. Wie diese Flags lauten können ist unten aufgelistet.
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:
| function ExWindows(const AQuestion: string; flag: word): Boolean; var vi : TOSVersionInfo; hToken : THandle; tp : TTokenPrivileges; h : DWord; begin result := false; if Aquestion='' then if MessageDlg(frage, mtConfirmation, [mbYes,mbNo],0) = IDNo then exit; vi.dwOSVersionInfoSize:=SizeOf(vi); GetVersionEx(vi); if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then begin // Windows NT // Achtung bei Delphi 2 muß @hToken stehen ... OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken); LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid); tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; h := 0; AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h); CloseHandle(hToken); result := ExitWindowsEx(flag,0); end else begin // Windows 95 Result := ExitWindowsEx(flag,0); end; end; |
Aufgerufen werden kann diese Funktion folgendermaßen:
Quelltext
1: 2: 3: 4:
| ExWindows('', ewx_logoff +flag); //Ausloggen ExWindows('Beenden', ewx_poweroff+flag); //Beenden (ATX) ExWindows('', ewx_reboot +flag); //Neustart ExWindows('', ewx_shutdown+flag); //Ausloggen |
<- end
Wärst du so nett udn könntest den Code so posten, dass ich ihn nur noch einfügen muss?`weil ich komm irgendwie nich klar, was ich wo reinschreiben muss, ich bring es nicht gestartet.thx
Code-Tags hinzugefügt. Tino
toms - Di 25.06.02 20:51
Langer Code???
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:
| function MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end;
procedure TForm1.Button1Click(Sender: TObject); begin MyExitWindows(EWX_SHUTDOWN or EWX_FORCE ); end; |
toms - Di 25.06.02 20:52
| Zitat: |
| thx, aber is dochn recht langer code... |
Der Code ist ja nicht länger als deiner:
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:
| function MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end;
procedure TForm1.Button1Click(Sender: TObject); begin MyExitWindows(EWX_SHUTDOWN or EWX_FORCE ); end; |
mig76 - Fr 03.01.03 12:58
Titel: windows98
hi!
also der oben aufgelistete Code funktioniert bei meiner XP-Maschine wunder-super-fantastisch toll!!! :D
Ich wollte das ganze jetzt aber auf einer Win98-Maschine probieren, und hab dabei folgendes Problem:
Das Logout funktioniert, d.h. der Rechner steht beim Login nachdem diese Prozedur aufgerufen wird, jedoch ist das Programm immer noch imer Hintergrund geöffnet!!! :?:
Wenn ich mich dann erneut anmelde, habe ich das Programm immer noch wunderschön geöffnet, was ich aber natürlich nicht will!!! :evil:
need help!!!!
Danke
maxk - Fr 03.01.03 13:55
Ich habe mir mal eine Komponente geschrieben, die Herunterfahren/Ausloggen/Neustarten/PowerOff/StandBy/Ruhezustand kann. Habe sie unter
http://www.maxk.keepfree.de/download/Shutdown.zip hochgeladen. Wer also interesse hat....
maxk
Delete - Fr 03.01.03 21:18
| tmkb hat folgendes geschrieben: |
| thx, aber is dochn recht langer code...ich hab hier im edh auch den gefunden, nur krieg ich den nicht gestartet... |
Da hättest du nicht im EDH suchen müssen. Das diese Funktion Schrott ist, wurde auch hier bereits gesagt. Ich verweise mal auf die Tatsache:
Quelltext
1: 2: 3:
| if Aquestion='' then if MessageDlg(frage, mtConfirmation, [mbYes,mbNo],0) = IDNo then exit; |
Gruselig. a) Fehler, weil "frage" überhaupt nicht bekannt ist. Und b) muss "Aquestion" leer sein, damit man eine MessageBox sieht? :? Da gibt´s bessere Funktionen im EDH; und so gesehen ist es sicher gut, dass sich jemand mit der Überarbeitung des Programms und des Inhalts beschäftigt. Der EDH ist nämlich an sich nicht schlecht.
| mig76 hat folgendes geschrieben: |
Das Logout funktioniert, d.h. der Rechner steht beim Login nachdem diese Prozedur aufgerufen wird, jedoch ist das Programm immer noch imer Hintergrund geöffnet!!! icon_question.gif
Wenn ich mich dann erneut anmelde, habe ich das Programm immer noch wunderschön geöffnet, was ich aber natürlich nicht will |
Du hast folgendes vergessen: bei einem Shutdown, Neustart usw. ist es egal, was mit den aktiven Programmen passiert. Bei einem Logout solltest du dein Programm beenden! Also nicht einfach bloß den o.g. Code zum Shutdown bzw. Logout benutzen, sondern danach gleich noch das eigene Programm via
beenden!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!