Busco algo de informacion para eso mismo. Obtener el nombre de la ventana de un proceso.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú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)
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)
Option 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
Option 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