Autor
|
Tema: Ayuda.Auto guardar datos en txt antes de que se apague windows (Leído 6,409 veces)
|
70N1
Desconectado
Mensajes: 355
|
Lo que necesito es que cuando pinches en apagar o cerrar sesion en windows, mi programa pueda hacer siertas acciones antes de cerrarse el windows.
-Detectar el cierre de windows -Ejecutar accion -Dejar que windows cierre
|
|
|
En línea
|
70N1
|
|
|
|
70N1
Desconectado
Mensajes: 355
|
Lamentablemente eso ya lo e provado y nada. Al cerrar windows, cierra la aplicacion sin dejarla ni respirar.
|
|
|
En línea
|
70N1
|
|
|
70N1
Desconectado
Mensajes: 355
|
Lo encontre. Este codigo hace que salte un mensaje cuando detecta que el pc va a ser apagado. Codigo en un moduloOption Explicit
' Declaraciones de funciones Api '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _ ByVal lpPrevWndFunc As Long, _ ByVal Hwnd As Long, _ ByVal MSG As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _ ByVal Hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long
'Constantes '''''''''''''''''''''''
' mensajes de windows
Public Const GWL_WNDPROC = -4 Public Const WM_QUERYENDSESSION = &H11 Global Const WM_CANCELMODE = &H1F
Global lpPrevWndProc As Long
'Crea el Hook ''''''''''''''''''''''''''''''''''' Public Sub Hook(Hwnd_Form As Long) lpPrevWndProc = SetWindowLong(Hwnd_Form, GWL_WNDPROC, AddressOf WindowProc) End Sub
' Elimina el Hook ''''''''''''''''''''''''''''''''''' Public Sub Unhook(Hwnd_Form As Long) Dim ret As Long ret = SetWindowLong(Hwnd_Form, GWL_WNDPROC, lpPrevWndProc) End Sub
'Función que gestiona los mensajes Function WindowProc(ByVal Hwnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
' Mensaje de cierre de sesión o de sistema If uMsg = WM_QUERYENDSESSION Then ' el valor WM_CANCELMODE anula el cierre WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, WM_CANCELMODE, wParam, wParam) MsgBox "Se intentó apagar Windows", vbInformation ' sale Exit Function End If ' continua WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, uMsg, wParam, lParam)
End Function Codigo del formularioOption Explicit
Private Sub Form_Load()
'Creamos el Hook ( Le pasa el Hwnd del formulario) Hook Me.Hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer) 'Eliminamos el Hook Unhook Me.Hwnd End Sub Url:http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/22.htm
|
|
|
En línea
|
70N1
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Hola, probá con este code, (creo que me lo pasó Leandro), con XP, si mal no recuerdo funcionaba bien , con windows seven no.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode = 2 Then MsgBox "se esta apagando" End If End Sub
Saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
seba123neo
|
jeje una vez probe ese codigo y casi me arruina la maquina, porque al apagarse y cuando salta el msgbox ya se descargaron cosas de memoria y programas vitales como el antivirus y demas, y cuando vuelve a la normalidad no estan mas cargados y queda todo medio feo saludos.
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Bueno, Seba, entonces lo descartamos hasta estar seguros, estoy probando el W7,pero en cuanto pueda lo pruebo en XP
Saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
70N1
Desconectado
Mensajes: 355
|
No se que pasa con el codigo que postee. con el msgbox funciona perfectamente, detiene el reinicio. Pero si intento que ejecute mas codigo no funciona y se reinicia. alguien save que es lo que puede estar pasando?. Esto funciona perfectamente.Function WindowProc(ByVal Hwnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
' Mensaje de cierre de sesión o de sistema If uMsg = WM_QUERYENDSESSION Then ' el valor WM_CANCELMODE anula el cierre WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, WM_CANCELMODE, wParam, wParam)
MsgBox "Se intentó apagar Windows", vbInformation ----->Se ejecuta despues de detener el apagado
' sale Exit Function End If ' continua WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, uMsg, wParam, lParam)
Pero aki no me detiene el apagado.Function WindowProc(ByVal Hwnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
' Mensaje de cierre de sesión o de sistema If uMsg = WM_QUERYENDSESSION Then ' el valor WM_CANCELMODE anula el cierre WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, WM_CANCELMODE, wParam, wParam)
call myfunction ---------->>> ya no detiene el apagado
' sale Exit Function End If ' continua WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, uMsg, wParam, lParam)
|
|
|
En línea
|
70N1
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Podrias usar Sleep para detener unos milisegundos el SO en el codigo ya provisto anteriormente y asi dejar ejecutar la parte de tu codigo.
|
|
« Última modificación: 24 Enero 2009, 19:54 pm por ░▒▓BlackZeroҖ▓▒░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
70N1
Desconectado
Mensajes: 355
|
En cuanto pruebe aviso de los resultados
|
|
|
En línea
|
70N1
|
|
|
|
|