Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Detener proceso apagado ordenador

Estas en el tema de Detener proceso apagado ordenador en el foro de Visual Basic clásico en Foros del Web. Hola a todos. No se si se podrá hacer pero ahí va: estoy intentando hacer un programita sencillo que controle el apagado de una máquina. ...
  #1 (permalink)  
Antiguo 24/02/2005, 10:45
 
Fecha de Ingreso: abril-2004
Mensajes: 23
Antigüedad: 20 años
Puntos: 0
Detener proceso apagado ordenador

Hola a todos.

No se si se podrá hacer pero ahí va: estoy intentando hacer un programita sencillo que controle el apagado de una máquina.

Lo que intento es saber si se podría evitar que el ordenador se apagase hasta que mi programa lo diga. El programa se quedaría residente esperando, pero cuando se le dé a apagar (apagado software se entiende porque lo que ya no puedo evitar es el botonazo o tirar del cable de alimentación) mi programa controlaría dicha señal, la interceptaría y decidiría que hacer.

Sabéis si existe alguna API, función u orden en Visual Basic que realice esto?
Suena un poco raro verdad pero es lo que me han pedido en el curro.

A ver si a alguien se le ocurre algo.

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 24/02/2005, 10:46
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
con el comando "Shutdown -a" podes anularlo pero este es dede el Dos, solo tendrías que aplicarlo al Shell

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 24/02/2005, 11:25
 
Fecha de Ingreso: abril-2004
Mensajes: 23
Antigüedad: 20 años
Puntos: 0
Gracias Geoavila por responder.

¿Cómo quedaría entonces: "shell("shutdown -a",1)"?
¿No debería de poner la ruta completa de dónde se encuentra el archivo "shutdown"?
A la hora de la espera de que se apague, ¿tendría que controlarlo con un bucle infinito?

Muchas gracias.
  #4 (permalink)  
Antiguo 24/02/2005, 11:56
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Windows envia WM_QUERYENDSESSION a todas las aplicaciones, si hicieras subclassing podrias devolver FALSE para que no se cerrar el sistema.

Tambien podes usar AbortSystemShutdown en otras circustancias (cuando sale la ventana que dice 'En x segundos se apagara su PC').
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 24/02/2005, 12:17
 
Fecha de Ingreso: abril-2004
Mensajes: 23
Antigüedad: 20 años
Puntos: 0
Gracias Eternal Idol por responder.
No comprendo eso de ¿subclassing? No lo he usado nunca, he buscado información pero no hay mucha.
Podrías por favor ponerme un trozo de código de ejemplo de qué sería eso de subclassing aplicado a la señal WM_QUERYENDSESSION.
Muchas gracias de antemano.
  #6 (permalink)  
Antiguo 24/02/2005, 12:23
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
El subclassing consiste en recibir los mensajes que envia Windows a las (sic) ventanas, se establece una funcion de recepcion, con SetWindowLong y el parametro GWL_WNDPROC, que hace de puente entre la original (en este caso creada por VB) y la tuya.

Si bajas el APIGuide vas a encontrar varios ejemplos:

http://www.mentalis.org/agnet/apiguide.shtml

http://www.mentalis.org/apilist/SetWindowLong.shtml#

Este por ejemplo:
http://www.mentalis.org/apilist/9FE2...4E2907952.html
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 24/02/2005, 12:26
Avatar de vbx3m  
Fecha de Ingreso: febrero-2005
Ubicación: Venezuela
Mensajes: 524
Antigüedad: 19 años, 3 meses
Puntos: 1
Apagar pc

Con esta API evitas que se apage el ordenador

Public Declare Function AbortSystemShutdown Lib "advapi32.dll" Alias
"AbortSystemShutdownA" (ByVal lpMachineName As String) As Long

solo falta que detecte cuando quieran apagar el pc...
  #8 (permalink)  
Antiguo 24/02/2005, 12:42
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
AbortSystemShutdown no funciona en 9x, de cualquier manera ya la habia nombrado. Por cierto si intentan usar esta funcion van a tener que conseguir el privilegio SE_SHUTDOWN_NAME antes, sino no funcionara.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 24/02/2005, 12:49
Avatar de vbx3m  
Fecha de Ingreso: febrero-2005
Ubicación: Venezuela
Mensajes: 524
Antigüedad: 19 años, 3 meses
Puntos: 1
Apagar

Bueno yo puse este codigo porque lo tenia... no sabia que no funcionaba en Win9x...
  #10 (permalink)  
Antiguo 24/02/2005, 12:52
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
No hay problema, de cualquier manera esa funcion sirve para evitar que se apague el sistema si la llamada que inicio el apagado es InitiateSystemShutdown que en general no se utiliza casi nunca.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 15:32.