Avatar billede djones Nybegynder
03. februar 2003 - 04:04 Der er 9 kommentarer og
1 løsning

Lukning af XP

Er der nogen der ved hvordan man lukker XP ned i Delphi 5?
Jeg har prøvet at bruge nogle metoder til 2000, men de logger mig bare af brugeren i stedet for at slukke for PC'en.
Jeg håber der er en der ved det, for nu gider jeg ikke selv rode med det mere.
Avatar billede double-g Juniormester
03. februar 2003 - 12:43 #1
Jeg har en batch fil der lukker XP med kommandoen

c:\WINDOWS\system32\shutdown /s
Avatar billede dcgeek Nybegynder
03. februar 2003 - 14:41 #2
Ja, den bedste løsning jeg kan komme på, er at bruge Winexec til at køre en Bat-fil.

Åbn notepad, skrive c:\WINDOWS\system32\shutdown /s (som doubele-g skriver),
gem den som LukWinXP.bat

Skriv så følgende kode for at lukke:
Winexec('LukWinXP.bat');
Avatar billede dcgeek Nybegynder
03. februar 2003 - 14:42 #3
sorry det var winexec('LukWinXP',1);
Avatar billede doc404 Novice
03. februar 2003 - 15:26 #4
Du kan bruge denne funktion. Der er kommenteret et check for ikke-nt ud..Men kig i Windows API'en under ExitWindowsEx

/doc

function ShutDownPC : Boolean;

  function SetPrivilege (sPrivilegeName: string; bEnabled: Boolean) : Boolean;
  var
    TPPrev,TP : TTokenPrivileges;
    Token    : THandle;
    dwRetLen  : DWORD;
  begin
    result := False;
    OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
    TP.PrivilegeCount := 1;
    if LookupPrivilegeValue (nil, PChar (sPrivilegeName), TP.Privileges[0].LUID) then
    begin
      if bEnabled then
        TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
      else
        TP.Privileges[0].Attributes := 0;
      dwRetLen := 0;
      result := AdjustTokenPrivileges (Token, False, TP, SizeOf (TPPrev), TPPrev,dwRetLen)
    end;
    CloseHandle (Token)
  end;

begin
  result := true;
  {
  if not WinInfo.IsNT then
    ExitWindowsEx(EWX_REBOOT,0)
  else
  }
    begin
      if SetPrivilege ('SeShutdownPrivilege', true) then
        begin
          if (not ExitWindowsEx (EWX_POWEROFF    , 0)) then result := False;
          SetPrivilege ('SeShutdownPrivilege', False)
        end
      else
        result := False
    end;
end;
Avatar billede dkn Nybegynder
03. februar 2003 - 21:11 #5
hvis man har tænkt sig at bruge windows kommandoen er det vidst ingen grund til at lave en bat fil først...

winexec('cmd.exe c:\WINDOWS\system32\shutdown /s', sw_hide);
Avatar billede djones Nybegynder
04. februar 2003 - 09:29 #6
OK. Jeg prøver lige jeres forslag... og så ser vi på det
Avatar billede djones Nybegynder
04. februar 2003 - 09:46 #7
doc404>> kan man force den til at lukke ned...altså lukke alle kørende programmer, uden at den venter på at de bliver færdige med at lukke ned?
Avatar billede doc404 Novice
04. februar 2003 - 09:56 #8
Kald med EitWindowsEx(EWX_POWEROFF or EWX_FORCE,0)... Men du risikerer at miste data
Avatar billede djones Nybegynder
04. februar 2003 - 10:37 #9
doc404>> det er også pointen. eller rettere sagt: det er meningen at den skal (i tilfælde af at windows fryser) lukke ned
Avatar billede djones Nybegynder
04. februar 2003 - 10:37 #10
Jeg glemte at acceptere - dooh!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester