| Autor |
Beitrag |
tmkb
      
Beiträge: 59
|
Verfasst: So 23.06.02 01:19
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
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 23.06.02 10:48
...herunterfahren / neustarten / ausloggen in Windows 9x /NT/ Me/2000/XP?
www.swissdelphicente.../showcode.php?id=168
tom
|
|
tmkb 
      
Beiträge: 59
|
Verfasst: 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.
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
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Di 25.06.02 20:51
Langer Code???
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
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Di 25.06.02 20:52
| Zitat: | | thx, aber is dochn recht langer code... |
Der Code ist ja nicht länger als deiner:
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
Hält's aus hier
Beiträge: 15
2010
|
Verfasst: Fr 03.01.03 12:58
Titel: windows98
hi!
also der oben aufgelistete Code funktioniert bei meiner XP-Maschine wunder-super-fantastisch toll!!!
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!!!
need help!!!!
Danke
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Fr 03.01.03 13:55
Ich habe mir mal eine Komponente geschrieben, die Herunterfahren/Ausloggen/Neustarten/PowerOff/StandBy/Ruhezustand kann. Habe sie unter www.maxk.keepfree.de/download/Shutdown.zip hochgeladen. Wer also interesse hat....
maxk
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Zuletzt bearbeitet von maxk am So 05.01.03 20:43, insgesamt 1-mal bearbeitet
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
Quelltext
beenden!
|
|
|