Ayuda Como Apagar la PC desde VFP especificando fecha y hora

445 views
Skip to first unread message

pupo

unread,
Aug 24, 2017, 9:53:29 AM8/24/17
to Comunidad de Visual Foxpro en Español
Hola Foxeros!

Alguien conoce como Apagar la PC desde VFP especificando fecha y hora.

Saludos

Pupo

Irwin Rodriguez

unread,
Aug 24, 2017, 10:02:01 AM8/24/17
to publice...@googlegroups.com
Hola Pupo, tiempo sin saber de ti amigo.

Con respecto a tu inquietud, me parece que te viene mejor crearte un archivo por lotes (.bat) y ejecutarlo desde VFP.

Un gusto escribirte amigo. Saludos...!
--
Irwin Rodríguez
Analista Programador

+593 0994903424
Latacunga - Ecuador

pupo

unread,
Aug 24, 2017, 10:29:58 AM8/24/17
to Comunidad de Visual Foxpro en Español
Gracias Irwin siempre tan oportuno y atento amigo, he estado alejado por tiempo, si tienes algo a mano
dame una idea.

Saludos

Pupo

Euro Nava

unread,
Aug 24, 2017, 10:47:56 AM8/24/17
to publice...@googlegroups.com

¿y tiene que ser necesariamente desde VFP, porque no utilizas el programador de tareas de Windows?

 

 

Saludos

 

 

 

El presente correo y sus anexos son exclusivamente para el uso de los destinatarios indicados en el encabezado del mismo, pueden contener información confidencial y/o privilegiada. Si usted por error ha recibido la presente correspondencia agradezco hacer omisión de esta y hacerme del conocimiento por esta misma vía    

 

Bendito el Hombre que ha sido llamado por Cristo para ser el soldado del ejército en cuya mano empuñe como arma la palabra de Dios

Irwin Rodriguez

unread,
Aug 24, 2017, 10:53:39 AM8/24/17
to publice...@googlegroups.com
Pupo el comando SHUTDOWN era el que se me ocurría para tal fin pero viendo sus propiedades veo que no tiene parametros para fecha sino un temporizador, es decir, supongo que lo maximo son 24 horas llevadas a segundos. Que tanto plazo en dias necesitas para el programado automatico?

La otra opcion es crearte una tarea programada en Windows pero ya se te escapa de VFP.

Saludos..!

pupo

unread,
Aug 24, 2017, 10:55:14 AM8/24/17
to Comunidad de Visual Foxpro en Español

Hice algo a la antigua si tienen algo mejor estoy atento! Será biene recibido.
Ese pedazo de prg lo compile y lo puse en el programador de tareas y funciona.
Aquí va:

SET HOURS TO 24
set date to british
SET CENTURY ON


STORE " " TO DMA44
STORE " " TO H1,H32014
STORE " " TO H2

STORE TIME() TO horadehoy
vpc_apaga=""


STORE dtoc(DATE()) TO DMA44

STORE SUBSTR(DMA44,1,2) TO H1 && día
STORE SUBSTR(DMA44,4,2) TO H2 && mes
STORE SUBSTR(DMA44,9,2) TO H32014 && año en 2 dígitos, activado 08.03.14 ahora se pone año


STORE SUBSTR(horadehoy,1,2)+ SUBSTR(horadehoy,4,2) TO vpc_apaga


IF val(vpc_apaga)=1050.and.h1="24".and.h2="08"

WAIT windows "Apago PC Espere, proceso de Salva de Sistema en curso..." NOWAIT

RUN shutdown && /h con esto lo pone a hibernar

ENDIF


Le falta más pues hay que crear frm para teclear hora y día, pues no siempre el apagado.

Gracias!

Zarlu

unread,
Aug 24, 2017, 11:26:40 AM8/24/17
to Comunidad de Visual Foxpro en Español
Buenos días pupo!
 
Te comparto esto que alguna vez encontré en la red:
 
***apagar pc
Parameter tlOptions, tlInteractiveShutdown
* Por defecto - Cierra todas las aplicaciones y reinicia Windows sin preguntar.
* Obtenida de UniversalThread
* Parámetros:
* tlOptions - (0 Cierra sesión windows, 1 Apaga windows, 2 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_CLOSE_SESSION 0 && Cerrar Sesión Windows.
#DEFINE EWX_SHUTDOWN 1 && Apagar Windows
#DEFINE EWX_REBOOT 2 && Reiniciar Windows
#DEFINE EWX_FORCE 4 && Forzar el cierre de las aplicaciones ó
&& cierra sesión.
#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 tlOptions = 0
  nFlag = IIF(tlInteractiveShutdown, EWX_CLOSE_SESSION + EWX_FORCE, EWX_CLOSE_SESSION)
 CASE tlOptions = 1
  nFlag = IIF(tlInteractiveShutdown, EWX_SHUTDOWN + EWX_FORCE, EWX_SHUTDOWN)
 CASE tlOptions = 2 && Si quieres colocas OTHERWISE
  nFlag = IIF(tlInteractiveShutdown, EWX_REBOOT + EWX_FORCE, EWX_REBOOT)
ENDCASE
=ExitWindowsEx(nFlag, 0)
CLEAR DLLS && para quitar de memoria ExitWindowsEx.
QUIT && Sale de VFP
****************
 
El código anterior es un prg llamado "apagarPC.prg"
Lo tengo implementado en un formulario de respaldo programado y lo llamo con la siguiente línea:
 
Do apagarPC With 1,.T.
 
Sería cuestión que condiciones el llamado a la fecha y hora que requieras
 
Suerte
zarlu
Chetumal, Quintana Roo, México
 
 

 
 
 
 

Jean Pierre Adonis De La Cruz Garcia

unread,
Aug 24, 2017, 11:31:40 AM8/24/17
to Comunidad de Visual Foxpro en Español
La vida es mas facil con APIS., yo uso mas el primero de esa manera programao mis proceso cuando termina de realizar copia de seguridad de mis Bases de datos y subir informacional FTP como enviar email, despues de eso, recien procede a Apagarse la PC.

********************************
*** Proceso con API ********
*******************************
#DEFINE LOGOFF 0 
#DEFINE SHUTDOWN 1 
#DEFINE REBOOT 2 
#DEFINE FORCE 4 
#DEFINE POWEROFF 8 

DECLARE SHORT ExitWindowsEx IN Win32API SHORT uFlags, INTEGER dwReserved 
=ExitWindowsEx(SHUTDOWN, 0) 

***************************************
*** Con WMI para apagar un computador.  ***
*********************************************
objWMI = GetObject("winmgmts:\\") 
cCadWMI = "Select * from Win32_OperatingSystem" 
oBServ = objWMI.ExecQuery(cCadWMI) 

For Each Pc in oSys 
Pc.Win32Shutdown(1) 
Next 

*********************************************
*** Con API  y shel *********************
*********************************************
oShell = CreateObject("Shell.Application") 
oShell.ShutdownWindows 

pupo

unread,
Aug 24, 2017, 11:58:43 AM8/24/17
to Comunidad de Visual Foxpro en Español
Gracias a todos los que han participado.
Lo que han mandado no me ha resuelto.
Algo mas sencillo aunque no sea de VFP pero que pueda apagar
poniendolo el dia y hora. con eso resuelvo por ahora
Hay un software para apagar pero no especifica dia.

Gracias!"

Euro Nava

unread,
Aug 24, 2017, 12:07:24 PM8/24/17
to publice...@googlegroups.com

Crea un archivo .BAT con el siguiente código:

 

SHUTDOWN /S /F /T 120

 

Luego regístralo dentro del Programador de Tareas de Windows y allí le indicas la hora de ejecución y las configuraciones adicionales

 

 

Saludos

 

 

 

El presente correo y sus anexos son exclusivamente para el uso de los destinatarios indicados en el encabezado del mismo, pueden contener información confidencial y/o privilegiada. Si usted por error ha recibido la presente correspondencia agradezco hacer omisión de esta y hacerme del conocimiento por esta misma vía    

 

Bendito el Hombre que ha sido llamado por Cristo para ser el soldado del ejército en cuya mano empuñe como arma la palabra de Dios

 


Enviado el: jueves, 24 de agosto de 2017 11:59 a.m.
Para: Comunidad de Visual Foxpro en Español

Reply all
Reply to author
Forward
0 new messages