Apagar equipo por completo

04/11/2004 - 19:29 por Juany | Informe spam
Hola a todos!
Tengo una función para apagar un equipo, pero ésta función en algunos
equipos la apaga por completo y en otros equipos manda el mensaje "Puede
apagar su equipo con seguridad", mi pregunta es: Se debe al bios de la
maquina?, o le hace falta algo a mi función?
Si alguien me puede ayudar mucho se los agradeceré.

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
 

Leer las respuestas

#1 carol
29/01/2012 - 22:56 | Informe spam
Ducky escribió el 08/11/2004 21:27 :
*FUNCTION APAGA( tlShutdownRequested, tlInteractiveShutdown )
* Por defecto - Cierra todas las aplicaciones y reinicia Windows sin
preguntar.
* Obtenida de UniversalThread
* 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_logoff 0
#DEFINE ewx_shutdown 1 && Apagar Windows
#DEFINE ewx_reboot 2 && Reiniciar Windows
#DEFINE ewx_force 4 && Forzar el cierre de
las aplicaciones
#DEFINE ewx_poweroff 8
#DEFINE ewx_forceifhung 16
#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 a la funcion
* 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

nflag = ewx_shutdown

=exitwindowsex(nflag, 0) && Fuerza el Cierre o Reinicio de Windows
* Declaracion de llamadas a la API (las se se usaran posteriormente)

QUIT && Sale de VFP
ENDFUNC

"Juany" escribió en el mensaje
news:
Hola a todos!
Tengo una función para apagar un equipo, pero ésta
función en algunos
equipos la apaga por completo y en otros equipos manda el mensaje "Puede
apagar su equipo con seguridad", mi pregunta es: Se debe al bios de la
maquina?, o le hace falta algo a mi función?
Si alguien me puede ayudar mucho se los agradeceré.


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway




Donde debo copiar este codigo..?? xq si lo copio en el evento click de algun boton me da un error...

Preguntas similares