Cómo forzar que windows se apague.
Llame a la siguiente rutina, por lo que
WinExit(EWX_POWEROFF o EWX_FORCE)
función WinExit(banderas: integer): boolean
& nbsp & nbsp función SetPrivilege(privilegeName: cadena de habilitar: boolean): boolean
& nbsp & nbsp var tpPrev,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp : TTokenPrivileges
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp token : THandle
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp dwRetLen : DWord
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp resultado := False
& nbsp & nbsp & nbsp & nbsp OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES o TOKEN_QUERY, token)
& nbsp & nbsp & nbsp & nbsp tp.PrivilegeCount := 1
& nbsp & nbsp & nbsp & nbsp si LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privilegios[0].LUID), a continuación,
& nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp habilitar si, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp.Privilegios[0].Atributos := SE_PRIVILEGE_ENABLED
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp.Privilegios[0].Atributos := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp dwRetLen := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp resultado := AdjustTokenPrivileges(token, Falso, tp, SizeOf(tpPrev), tpPrev, dwRetLen)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp CloseHandle(token)
& nbsp & nbsp final
begin
& nbsp & nbsp si SetPrivilege('SeShutdownPrivilege', true) then begin
& nbsp & nbsp & nbsp & nbsp ExitWindowsEx(banderas, 0)
& nbsp & nbsp & nbsp & nbsp SetPrivilege('SeShutdownPrivilege', False);
& nbsp & nbsp final
fin
El apagado de windows
El apagado de windows : Multi-millones de consejos para hacer su vida mas facil.
Como forzar que windows se apague.
Llame a la siguiente rutina, por lo que
WinExit(EWX_POWEROFF o EWX_FORCE)
funcion WinExit(banderas: integer): boolean
& nbsp & nbsp funcion SetPrivilege(privilegeName: cadena de habilitar: boolean): boolean
& nbsp & nbsp var tpPrev,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp : TTokenPrivileges
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp token : THandle
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp dwRetLen : DWord
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp resultado := False
& nbsp & nbsp & nbsp & nbsp OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES o TOKEN_QUERY, token)
& nbsp & nbsp & nbsp & nbsp tp.PrivilegeCount := 1
& nbsp & nbsp & nbsp & nbsp si LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privilegios[0].LUID), a continuacion,
& nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp habilitar si, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp.Privilegios[0].Atributos := SE_PRIVILEGE_ENABLED
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp tp.Privilegios[0].Atributos := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp dwRetLen := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp resultado := AdjustTokenPrivileges(token, Falso, tp, SizeOf(tpPrev), tpPrev, dwRetLen)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp CloseHandle(token)
& nbsp & nbsp final
begin
& nbsp & nbsp si SetPrivilege('SeShutdownPrivilege', true) then begin
& nbsp & nbsp & nbsp & nbsp ExitWindowsEx(banderas, 0)
& nbsp & nbsp & nbsp & nbsp SetPrivilege('SeShutdownPrivilege', False);
& nbsp & nbsp final
fin