Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Apagar y reiniciar windos (https://www.clubdelphi.com/foros/showthread.php?t=25902)

salvanano 07-10-2005 01:11:39

Apagar y reiniciar windos
 
Hola, no se si esto debe ir aqui pero soy novato. Quisiera saber cual son los comando de windows para apagar y reiniciar el ordenador. lo que quiero realizar es un form que al pulsar un boton se apague o reinicie windows.
1 saludo y gracias de antemano

dec 07-10-2005 01:17:27

Hola,

¿Qué tal una búsqueda en los Foros? ;)

OSKR 07-10-2005 19:35:38

no recuerdo si ya habia respondido esto antes.....pero bueno!!
ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0);

dec 07-10-2005 21:16:40

Hola,


Cita:

Empezado por OSKR
no recuerdo si ya habia respondido esto antes.....pero bueno!!

ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0);

El tema no es tan sencillo... a lo menos por mi parte, al desarrollar determinado programa (escrito en C#), que puede encontrarse en esta página Web por el nombre de "Apagador", hube de ir un poco más allá, asignando ciertos privilegios, por ejemplo, para poder al cabo llamar a la función que propones.

Ahora mismo no recuerdo más, pero, efectivamente, entre los resultados de la búsqueda llevada a cabo en estos Foros (y que enlacé más arriba) hay un Hilo en que se trata esta cuestión y este cuenta con más de dos decenas de respuestas. De ahí que le remitiera a dichos resultados y no le hablara sin más de la función que mencionas. Esto lo digo sin ánimo de molesar en absoluto. ;)

OSKR 08-10-2005 22:00:07

Hmmmm!!, se q no tienes animo de molestar :), no he usado C# hasta el dia de hoy, esta funcion la he usado con Builder y funciona al pelo, siempre trabajo con privilegios de administrador en el lab donde estoy, no he probado con una cuenta mortal pero lo intentaré...además como salvanano solo necesitaba un comando de Guindows pa' reiniciar pues decidi escribirlo sin ahondar en el tema a menos q lo especificara ;)


Saludos

bustio 14-10-2005 03:27:08

tal vez te sirva
 
Hola:
He desarrollado una Unit que realiza el Restart y el LogOff de cualquier Windows(probado hasta el XPSP1) y a mi me funciona a las mil maravillas. Aqui te mando el codigo de mi clase.. Espero te sirva y me des tus comentarios.
Siempre para ayudar...

Código Delphi [-]
 unit uShutDown;
 {
     clae que apaga cualquier sistema operativo familia Windows.
     Probado hasta el WinXPSP1.
     Autor: Lazaro Bustio Martinez
                  Estudiante Ing. Informatica, 5to anno.
                  Cujae - CUBA
                  lbustio@yahoo.es
              
              NOTA: Mucha de las cosas aqui  mostrada no hubiesen sido posible
              sin la ayuda del foro de www.clubdelphi.com.. a todos ellos
              MUCHAS GRACIASSS!!!
 
 }
 
 interface
 uses
   Windows,SysUtils, Variants, Classes;
 
 Type
   TShutDownSystem = Class(TObject)
     Public
       Procedure EnableShutDown;
       Function  IsWinNT : boolean;
       Procedure ShutDownNT(Force : Boolean);
       Procedure RebootNT(Force : Boolean);
       Procedure LogOffNT(Force : Boolean);
       Constructor Create;
       Destructor Destroy;
      end;
 
 implementation
 
 { TShutDownSystem }
 function GetCurrentProcess: THandle;stdcall;external 'kernel32.dll';
 function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWord; 
   TokenHandle: PHandle): bool;stdcall;external 'advapi32.dll'
 
 constructor TShutDownSystem.Create;
 begin
   Inherited Create;
 end;
 
 destructor TShutDownSystem.Destroy;
 begin
   Inherited Destroy;
 end;
 
 procedure TShutDownSystem.EnableShutDown;
 var
   hProc    : THandle;
   hToken   : THandle;
   mLUID    : Int64;
   mPriv    : TOKEN_PRIVILEGES;
   mNewPriv : TOKEN_PRIVILEGES;
   mVar     : DWord;
 begin
   hProc := GetCurrentProcess;
   OpenProcessToken(hProc,TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY,@hToken);
   LookupPrivilegeValue(PChar(''),PChar('SeShutDownPrivilege'),mLUID);
   mPriv.PrivilegeCount := 1;
   mPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   mPRiv.Privileges[0].LUID := mLUID;
   mVar := 4 + (12 * mNewPriv.PrivilegeCount);
   AdjustTokenPrivileges(hToken,false, mPriv,4+12 * mPriv.PrivilegeCount,mNewPriv,mVar);  
 end;
 
 function TShutDownSystem.IsWinNT: boolean;
 var
   myOS : OSVERSIONINFO;
 begin
   myOS.dwOSVersionInfoSize := sizeOf(myOS);
   GetVersionEx(myOS);
   IsWinNT := (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT); 
 
 end;
 
 procedure TShutDownSystem.LogOffNT(Force: Boolean);
 var
   Flags : LongInt;
 begin
   Flags := EWX_LOGOFF;
   If Force then Flags :=  Flags + EWX_FORCE;
   If IsWinNT then EnableShutDown;
   ExitWindowsEx(Flags,0);
 end;
 
 procedure TShutDownSystem.RebootNT(Force: Boolean);
 var
   Flags : LongInt;
 begin
   Flags := EWX_REBOOT;
   If Force then Flags :=  Flags + EWX_FORCE;
   If IsWinNT then EnableShutDown;
   ExitWindowsEx(Flags,0);
 end;
 
 procedure TShutDownSystem.ShutDownNT(Force: Boolean);
 var
   Flags : LongInt;
 begin
   Flags := EWX_SHUTDOWN;
   If Force then Flags :=  Flags + EWX_FORCE;
   If IsWinNT then EnableShutDown;
   ExitWindowsEx(Flags,0);
 
 end;
 
 end.

dec 14-10-2005 17:50:48

Hola,

Gracias bustio por el aporte. Probablemente a alguien le vendrá estupendo. ;)


La franja horaria es GMT +2. Ahora son las 03:55:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi