Reiniciar el ordenador

Disculpa que te moleste con una pregunta tan sencilla pero no logro hacer que mi ordenador se reinicie desde una aplicación hecha en delphi
¿Cómo hacerlo?

1 respuesta

Respuesta
1
Básicamente aunque suena sencilla la pregunta, una vez sentí la curiosidad y me la hice; para darte un poco de explicación de como funciona Windows en cuanto a un LOGOFF User; existen tres LOGOFF
1- Terminar sesión
2- Reiniciar sistema
3- Apagar;
Entre en internet por esos timpos, ya sabia que el pagado de sistema dependía de una función propia de windows, pero esta esta supeditada los privilegios que como usuario o administrador tenga la aplicación que esta corriendo, lo que pude encontrar fue una aplicación visual basic que luego pase a delphi, V4 en ese entonces y me funciono bien, de hecho la uso para apagar el pc desde una unidad de control remoto. Estas rutinas manejan los tres tipos de LOGOFF de windows para programadores.
function GetCurrentProcess:THandle;
stdcall;external 'kernel32.dll';
function OpenProcessToken(ProcessHandle:THandle;DesiredAccess:DWord;
TokenHandle:PHandle):bool;
stdcall;external 'advapi32.dll';
procedure 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 IsWinNT():Boolean;
var
myOS:OSVERSIONINFO;
begin
myOS.dwOSVersionInfoSize:=sizeof(myOS);
GetVersionEx(myOS);
IsWinNT:=(myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
end;
procedure 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;
procedure 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 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;
//----
Cópialas en tu aplicación y Usalas.
Éxitos.
Ing. Mec. Luis Delgado

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas