Foros del Web » Programación para mayores de 30 ;) » Programación General »

Apagar el PC a determinada hora

Estas en el tema de Apagar el PC a determinada hora en el foro de Programación General en Foros del Web. Hola a todos!! En esta ocacion tengo una pregunta para los programadores de VB. estoy haciendo un programa con el cual apague la computadora automaticamente, ...
  #1 (permalink)  
Antiguo 19/12/2004, 01:49
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Apagar el PC a determinada hora

Hola a todos!!

En esta ocacion tengo una pregunta para los programadores de VB.

estoy haciendo un programa con el cual apague la computadora automaticamente, a determinada hora establecida. la unica idea que se me ocurre es hacer que la aplicacion a determinada hora especificada por el usuario ejecute un archivo bat con la instruccion

shutdown -s o bien shutdown -r

pero no se como ejecutar tal archivo. alguien puede ayudarme o hay alguna funcion provista por VB para el apagado automatico del sistema?? de antemano miuchas gracias!!
  #2 (permalink)  
Antiguo 19/12/2004, 03:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
¿Shutdown? Que yo sepa eso no existe en Windows ...

Hay funciones de la API de Windows para hacerlo como por ejemplo ExitWindowsEx:

http://www.c0d3rz.com.ar/foro/viewto...ad3908677e4908
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 19/12/2004, 16:52
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Gracias por la ayuda!!

aunque con esa funcion unicamente me permite terminar la secion, pero no la apaga ni la reinicia, ni nada, la estoy invocando de la siguiente forma:

Call ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_OPERATINGSYSTEM)

con eso les estoy diciendo que se reinicie, pero unicamente lo que hace es terminar la secion del usuario, quiza sea porque al invocar la funcion de esta manera contiene un comentario:

EWX_REBOOT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.

que tengo que activar los privilegios??

si me pueden ayudar se los agradeceria.

thanks!!
  #4 (permalink)  
Antiguo 19/12/2004, 16:56
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
En la página que deje como link arriba está como activar el privilegio SE_SHUTDOWN_NAME.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 20/12/2004, 19:55
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
hey, he seguido investigando al respecto, y ya encontre otra solucion, pero unicamente funciona con win xp.

es muy sencillo, unicamente

Private Sub Command1_Click()

shell "shutdown -s"

end sub


y entonces apagara el sistema, con las apis tambien funciona pero hay que hacer muchas un par de cosas extras para que funcione.

bueno, espero que a alguin le sirva tambien!!

bytes!!
  #6 (permalink)  
Antiguo 29/12/2004, 17:54
 
Fecha de Ingreso: octubre-2004
Mensajes: 12
Antigüedad: 19 años, 6 meses
Puntos: 0
Hola, recuerdo que ExitWindowsEx dependiendo de los parámetros que se le pasaban cerraba la sesión, o cerraba el sistema.
  #7 (permalink)  
Antiguo 29/12/2004, 18:10
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
pero el "shutdonw -s"{comando para apagar} te puede servir con un perqueño archivo .bat donde envies el comando o bien con el exitwindows

y bueno si queres intentar con exit windows usa esto

http://www.forosdelweb.com/showpost....5&postcount=12

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #8 (permalink)  
Antiguo 29/12/2004, 18:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
El único inconveniente es que el programa ese sólo viene distribuido con Windows XP, en cuanto a ExitWindowsEx me sigue pareciendo por lejos la mejor opción.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 29/12/2004, 23:04
 
Fecha de Ingreso: mayo-2004
Ubicación: En mi casa
Mensajes: 54
Antigüedad: 20 años
Puntos: 0
jeje

Bueno yo hize un programa en vb que hace exactamente lo que tu quieres, lo de shutdown -s .. podría servir pero lo + confiable es exitwindowsex.
si quieres ver el programa visita www.cybersword.tk se llama CSS - Shutdowner.
Bueno pero en cuanto a lo de pq no funciona el exit windows es pq tienes que cambiar los privilegios, yo lo hice sin saber muy bien lo que hacía se deben usar otras apis y el código es bastante largo.
También usé algunas apis para detectar que SO tiene el usuario y así usar todo el enredo de los privilegios o no.
Sin embargo voy a mirar como seria con el .bat creo que puede ser muy buena idea con muuuucho menos código, el shell te puede servir en este caso pero para ejecutar cualquier tipo de programa documento o lo que sea usa una api llamada shellexecute.
__________________
Quiero que ciencia y tecnología avancen muy rápido, por eso comparto lo que se, podría servir a alguién q esté creando algo genial.
  #10 (permalink)  
Antiguo 30/12/2004, 01:01
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Hola a todos!!

pues si, usando las apis es un buen de codigo, edemas de que, por ejemplo si estoy usando un rograma, por ejemplo WORD, a la hora de apagar, este programa pregunta si deseas guardar las cambios actuales, entonces se para el apagado, y pues ya no hace nada, si le das cancelar, entonces se detiene el apagado, alguien sabe como solucionar esto. es decir, forzar a todos los programas en ejecucion a terminar??

Este es el codigo que uso para apagar sistema:
Código:
Option Explicit

Public Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Public Const TOKEN_QUERY As Long = &H8
Public Const SE_PRIVILEGE_ENABLED As Long = &H2

Public Const EWX_LOGOFF As Long = &H0
Public Const EWX_SHUTDOWN As Long = &H1
Public Const EWX_REBOOT As Long = &H2
Public Const EWX_FORCE As Long = &H4
Public Const EWX_POWEROFF As Long = &H8
Public Const EWX_FORCEIFHUNG As Long = &H10 '2000/XP only

Public Const VER_PLATFORM_WIN32_NT As Long = 2
Public uflags As Long
Public success As Long

'TIPO DE DATOS PARA LAS APIS
Public Type OSVERSIONINFO
  OSVSize         As Long
  dwVerMajor      As Long
  dwVerMinor      As Long
  dwBuildNumber   As Long
  PlatformID      As Long
  szCSDVersion    As String * 128
End Type

Public Type LUID
   dwLowPart As Long
   dwHighPart As Long
End Type

Public Type LUID_AND_ATTRIBUTES
   udtLUID As LUID
   dwAttributes As Long
End Type

Public Type TOKEN_PRIVILEGES
   PrivilegeCount As Long
   laa As LUID_AND_ATTRIBUTES
End Type

'DECLARACION DE LAS APIS A USAR
Public Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Public Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Any, ReturnLength As Long) As Long
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

'FUNCION PARA SABER QUE SISTEMA OPERATIVO CORRE
'returns True if running Windows NT,
'Windows 2000, Windows XP, or .net server
Public Function IsWinNTPlus() As Boolean
   #If Win32 Then
      Dim OSV As OSVERSIONINFO
      OSV.OSVSize = Len(OSV)
      If GetVersionEx(OSV) = 1 Then
         IsWinNTPlus = (OSV.PlatformID = VER_PLATFORM_WIN32_NT) And (OSV.dwVerMajor >= 4)
      End If
   #End If
End Function

'FUNCION PARA DAR LOS PERMISOS NECESARIOS
Public Function EnableShutdownPrivledges() As Boolean
   Dim hProcessHandle As Long
   Dim hTokenHandle As Long
   Dim lpv_la As LUID
   Dim token As TOKEN_PRIVILEGES
   
   hProcessHandle = GetCurrentProcess()
   
   If hProcessHandle <> 0 Then
   
     'open the access token associated
     'with the current process. hTokenHandle
     'returns a handle identifying the
     'newly-opened access token
      If OpenProcessToken(hProcessHandle, _
                        (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _
                         hTokenHandle) <> 0 Then
   
        'obtain the locally unique identifier
        '(LUID) used on the specified system
        'to locally represent the specified
        'privilege name. Passing vbNullString
        'causes the api to attempt to find
        'the privilege name on the local system.
         If LookupPrivilegeValue(vbNullString, _
                                 "SeShutdownPrivilege", _
                                 lpv_la) <> 0 Then
         
           'TOKEN_PRIVILEGES contains info about
           'a set of privileges for an access token.
           'Prepare the TOKEN_PRIVILEGES structure
           'by enabling one privilege.
            With token
               .PrivilegeCount = 1
               .laa.udtLUID = lpv_la
               .laa.dwAttributes = SE_PRIVILEGE_ENABLED
            End With
   
           'Enable the shutdown privilege in
           'the access token of this process.
           'hTokenHandle: access token containing the
           '  privileges to be modified
           'DisableAllPrivileges: if True the function
           '  disables all privileges and ignores the
           '  NewState parameter. If FALSE, the
           '  function modifies privileges based on
           '  the information pointed to by NewState.
           'token: TOKEN_PRIVILEGES structure specifying
           '  an array of privileges and their attributes.
           '
           'Since were just adjusting to shut down,
           'BufferLength, PreviousState and ReturnLength
           'can be passed as null.
            If AdjustTokenPrivileges(hTokenHandle, _
                                     False, _
                                     token, _
                                     ByVal 0&, _
                                     ByVal 0&, _
                                     ByVal 0&) <> 0 Then
                                     
              'success, so return True
               EnableShutdownPrivledges = True
   
            End If  'AdjustTokenPrivileges
         End If  'LookupPrivilegeValue
      End If  'OpenProcessToken
   End If  'hProcessHandle
End Function

Public Sub ReiniciarPc()
    uflags = EWX_REBOOT
    If IsWinNTPlus() Then
        success = EnableShutdownPrivledges()
        If success Then Call ExitWindowsEx(uflags, 0&)
        'Shell "shutdown -r -t 0"
    Else
        '9x system, so just do it
        Call ExitWindowsEx(uflags, 0&)
    End If
End Sub

Última edición por stock; 30/12/2004 a las 01:04
  #11 (permalink)  
Antiguo 30/12/2004, 05:40
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Public Sub ReiniciarPc()
uflags = EWX_REBOOT or EWX_FORCE
If IsWinNTPlus() Then
success = EnableShutdownPrivledges()
If success Then Call ExitWindowsEx(uflags, 0&)
'Shell "shutdown -r -t 0"
Else
'9x system, so just do it
Call ExitWindowsEx(uflags, 0&)
End If
End Sub
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 31/12/2004, 12:44
Avatar de Avelar  
Fecha de Ingreso: noviembre-2002
Ubicación: Ensenada, Baja California, México
Mensajes: 673
Antigüedad: 21 años, 5 meses
Puntos: 1
Prueba en esta dirección, de seguro te sirve: http://www.vb-helper.com/howto_shutd...windowsex.html
__________________
Ariel Avelar
  #13 (permalink)  
Antiguo 07/01/2005, 22:28
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
OK, funciona a la perfeccion.....

thanks everybody!!

bytes!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:06.