PDA

Ver la Versión Completa : Apagar y reiniciar windos


salvanano
07-10-2005, 01:11:39
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 (http://www.clubdelphi.com/foros/search.php?searchid=328749)? ;)

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,



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 (http://dec.clubdelphi.com/) 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
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...


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 (http://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. ;)