Autor Beitrag
tmkb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 23.06.02 10:48 
...herunterfahren / neustarten / ausloggen in Windows 9x /NT/ Me/2000/XP?

www.swissdelphicente.../showcode.php?id=168


tom
tmkb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: 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.
ausblenden volle Höhe 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Di 25.06.02 20:51 
Langer Code???

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Di 25.06.02 20:52 
Zitat:
thx, aber is dochn recht langer code...


Der Code ist ja nicht länger als deiner:

ausblenden volle Höhe 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
Hält's aus hier
Beiträge: 15


2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden 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
ausblenden Quelltext
1:
self.Close;					

beenden!