Reiniciar windows xp

Como puedo reiniciar windows xp desde vfp9.
Te agradecería tu respuesta.

1 Respuesta

Respuesta
1
FUNCTION APAGA( tlShutdownRequested, tlInteractiveShutdown )
* Por defecto - Cierra todas las aplicaciones y reinicia Windows sin preguntar.
* Parámetros:
*
* tlShutdownRequested - .T. Cierra Windows, .F. (default) Reinicia Windows
* tlInteractiveShutdown - .T. Muestra el cuadro de diálogo para preguntar si cerramos Windows, .F. (default) No pregunta nada y cierra Windows
* Esta función permite cerrar o reiniciar Windows desde VFP; hace las llamadas necesarias
* a funciones API de Windows para ajustar los privilegios necesarios en las plataformas Windows NT 4.0 o Windows 2000
* si se puede. La función devuelve .F. si no puede hacer los ajustes necesarios para garantizar que el privilegio
* llamado SE_SHUTDOWN_NAME sea establecido. En Windows 9x no es necesario establecer este privilegio.
* Probado en las plataformas WinNT 4.0 SP6, Win2K Pro, Win98 y WinME.
* Probado en VFP 5.0, VFP 6.0 y VFP 7.0 SP1.
*
* Definición de constantes
#DEFINE SE_SHUTDOWN_NAME "SeShutdownPrivilege" && Nombre del privilegio de Windows NT y 2000
#DEFINE SE_PRIVILEGE_ENABLED 2 && Flag para activar privilegios
#DEFINE TOKEN_QUERY 2 && Token para consultar el estado
#DEFINE TOKEN_ADJUST_PRIVILEGE 0x20 && Token para ajustar privilegios
#DEFINE EWX_SHUTDOWN 1 && Apagar Windows
#DEFINE EWX_REBOOT 2 && Reiniciar Windows
#DEFINE EWX_FORCE 4 && Forzar el cierre de las aplicaciones
#DEFINE SIZEOFTOKENPRIVILEGE 16
* API de Windows para ejecutar ShutDown - Todas las versiones
DECLARE ExitWindowsEx IN WIN32API INTEGER uFlags, INTEGER dwReserved && API call to shut down Windows
* Comprobamos la versión de Windows para saber si hay que establecer privilegios
IF ('4.0' $ OS() OR '5.0' $ OS() OR 'NT' $ OS())
* APIs necesarias para manipular los permisos de los procesos
* Devuelve el LUID privilegio específico - changes each time Windows restarts
DECLARE SHORT LookupPrivilegeValue IN ADVAPI32 ;
INTEGER lpSystemName, ;
STRING @ lpPrivilegeName, ;
STRING @ pluid
* Obtiene el hToken con los permisos de un proceso
DECLARE SHORT OpenProcessToken IN Win32API ;
INTEGER hProcess, ;
INTEGER dwDesiredAccess, ;
INTEGER @ TokenHandle
* Ajusta otros privilegios de un proceso vía un hToken específico
DECLARE INTEGER AdjustTokenPrivileges IN ADVAPI32 ;
INTEGER hToken, ;
INTEGER bDisableAllPrivileges, ;
STRING @ NewState, ;
INTEGER dwBufferLen, ;
INTEGER PreviousState, ;
INTEGER @ pReturnLength
* Obtiene el Handle de un proceso
DECLARE INTEGER GetCurrentProcess IN WIN32API
LOCAL cLUID, nhToken, cTokenPrivs, nFlag
cLUID = REPL(CHR(0),8) && Identificador Unico Local de 64 bits de un privilegio
IF LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, @cLUID) = 0
RETURN .F. && Privilegio No definido en el proceso
ENDIF
nhToken = 0 && Token de un proceso usado para manipular los privilegios del mismo
IF OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY + TOKEN_ADJUST_PRIVILEGE , @nhToken) = 0
RETURN .F. && El sistema operativo no puede garantizar los privilegios necesarios
ENDIF
* Se crea la estructura TOKEN_PRIVILEGES, los 4 primeros bytes DWORD indican permisos,
* seguidos de un array(arreglo) de 8 bytes con los LUIDs y los últimos 4 bytes son los atributos
* de los permisos.
cTokenPrivs = CHR(1) + REPL(CHR(0),3) + cLUID + CHR(SE_PRIVILEGE_ENABLED) + REPL(CHR(0), 3)
IF AdjustTokenPrivileges(nhToken, 0, @cTokenPrivs, SIZEOFTOKENPRIVILEGE, 0, 0) = 0
RETURN .F. && Privilegio denegado o no permitido
ENDIF
ENDIF
CLOSE ALL && Cierra todas las tablas de VFP
FLUSH && Fuerza la escritura en disco de los Buffers
CLEAR EVENTS && Cancela eventos pendientes
ON SHUTDOWN && Reestablece el proceso SHUTDOWN
* Se comprueban los parámetros pasados
DO CASE
CASE tlShutdownRequested AND tlInteractiveShutdown
nFlag = EWX_SHUTDOWN
CASE tlShutdownRequested
nFlag = EWX_SHUTDOWN + EWX_FORCE
CASE tlInteractiveShutdown
nFlag = EWX_REBOOT
OTHERWISE
nFlag = EWX_REBOOT + EWX_FORCE
ENDCASE
=ExitWindowsEx(nFlag, 0) && Fuerza el Cierre o Reinicio de Windows
QUIT && Sale de VFP
Endfunc
Cuando ejecuto el programa con tu código no pasa nada.
Parece que falta algo.
Tienes que ejecutarlo así:
=Apaga(.t.,.f.)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas