Cómo deshabilitar las teclas win, alt y tab en el protector de pantalla VB
Este ejemplo demuestra cómo deshabilitar alt+esc, alt+tab, alt+esc. El sistema requiere Windows NT 4.0 SP3 y superior. Para utilizar el operador AddressOf, utilice VB5 o VB6.
Private Const WH_KEYBOARD_LL = 13& 'Habilita que el teclado se publique en la cola de entrada del hilo
'Monitoreo de eventos de entrada
'
Private Const HC_ACTION = 0& 'parámetros wParam y lParam
'Contiene información sobre
'mensajes del teclado
Private Const LLKHF_EXTENDED = &H1&Probar indicador de clave extendida
Const privada LLKHF_INJECTED = &H10& 'Indicador de inyección de evento de prueba
Const privada LLKHF_ALTDOWN = &H20& 'Código de contexto de prueba
Const privada LLKHF_UP = &H80& 'Estado de transición de prueba flags
Const privada VK_TAB = &H9 'Constante de clave virtual
Const privada VK_CONTROL = &H11
Const privada VK_ESCAPE = & Tipo privado KBDLLHOOKSTRUCT
vkCode As Long 'Código de clave virtual que va de 1 a 254
scanCode As Long 'Código de escaneo de hardware de la clave
banderas As Long ' Especifique indicadores de clave extendidos,
'Indicadores de inyección de eventos, códigos de contexto,
' y indicadores de estado de transición
time As Long 'This La marca de tiempo del mensaje
dwExtraInfo As Long 'Información adicional relacionada con el mensaje
Tipo de finalización
Función de declaración privada SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook Mientras, _
ByVal lpfn Mientras, _
ByVal hmod Mientras, _
p >ByVal dwThreadId As Long) As Long
Función de declaración privada UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Privado Declarar función CallNextHookEx Lib "user32 " _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _ < / p>
ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
( pDest como cualquiera, _
pSource como cualquiera, _
ByVal cb como
Long)
Función de declaración privada GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) como entero
Privada m_hDllKbdHook As Long 'Hold
'Procedimiento de variable privada del identificador de gancho
Public Sub Main()
'Establece y obtiene el identificador del identificador de teclado
m_hDllKbdHook As Long As Integer
Privado m_hDllKbdHook siempre que 'Privado hDllKbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
AddressOf LowLevelKeyboardProc, _
App.hInstance, _
0&)
Si m_ hDllKbdHook <> 0 Entonces
'¡Está enganchado! Mostrar cuadro de mensaje
'Para suspender temporalmente la aplicación aquí
' (LowLevelKeyboardProc continuará
'procesando el mensaje), y
'Se muestra después del cuadro de mensaje
'Descolgar llamada. Consulte arriba para obtener información específica de
.
'Información específica.
MsgBox "Ctrl+Esc, Alt+Tab y Alt+Esc están bloqueados." & _
"Haga clic en Aceptar para salir y volver a habilitar las pulsaciones de teclas.", _
'Haga clic en Aceptar para salir y volver a habilitar las claves.
vbOKOnly O vbInformation, _
"Keyboard Hook Active"
' Colocado solo en esta demostración.
'Cuando se usa en una aplicación, pasa al evento de descarga del formulario principal.
Llame a UnhookWindowsHookEx(m_hDllKbdHook)
De lo contrario
MsgBox "Error al instalar el enlace de teclado de bajo nivel - " & Err.
Fin If
End Sub
Función pública LowLevelKeyboardProc(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
'Función de devolución de llamada definida por la aplicación
'Se utiliza con la función SetWindowsHookEx.
'El sistema llamará a esta función cada vez que un nuevo evento de entrada de teclado esté a punto de publicarse en la cola de entrada del hilo.
'El sistema llamará a esta función cada vez que un nuevo evento de entrada de teclado esté a punto de publicarse en la cola de entrada del hilo.
"La entrada del teclado puede provenir de un controlador de teclado local o de una llamada a la función
"keybd_event". Si la entrada del teclado proviene de una llamada a la función keybd_event, entonces
'
La entrada al controlador del teclado puede provenir de una llamada a la función keybd_event
'Si la entrada proviene de una llamada a la función keybd_event, la entrada p>
'es" inyección".
kbdllhs estático como KBDLLHOOKSTRUCT
'Si nCode es menor que cero, el gancho
'El procedimiento debe devolver el valor devuelto por CallNextHookEx.
'
'Si nCode es mayor o igual a cero,
' y el proceso de enlace no maneja el
' mensaje, se recomienda encarecidamente que
'Llame a CallNextHookEx y devuelva su
'valor devuelto; de lo contrario,
'Otras aplicaciones que tengan instalado el gancho WH_KEYBOARD_LL; no podrá
'Se recibe la notificación de gancho y pueden ocurrir errores
'Behavior.
'
'Si el proceso de enlace maneja el mensaje,
'puede devolver un valor distinto de cero para evitar
' El sistema pasa el mensaje al resto de la cadena de gancho o al procedimiento de ventana de destino.
Si nCode = HC_ACTION Entonces
'nCode especifica el gancho
'El procedimiento almacenado utiliza HC_ACTION como el único código válido.
'Cuando se recibe un código HC_ACTION,
'wParam y lParam contienen información
'que no es el código utilizado por el gancho para procesar el mensaje.
'lParam contiene información sobre los mensajes del teclado
'lParam contiene un puntero a una estructura KBDLLHOOKSTRUCT.
'Llamar a CopyMemory(kbDLLHOOKSTRUCT).Llamar a CopyMemory(kbdllhs, ByVal lParam, Len(kbdllhs))
'Ctrl+Esc ------------ - --
Si (kbdllhs.vkCode = VK_ESCAPE) Y _
CBool( GetAsyncKeyState(VK_CONTROL) _
Y &H8000) Entonces
Debug.Print "Ctrl+Esc bloqueado"
LowLevelKeyboardProc = 1
Salir de la función
Fin si 'kbdllhs.vkCode = VK_ESCAPE
'Alt+Tab --------------
Si (kbdllhs.vkCode = VK_TAB) y_
CBool(kbdllhs.flags Y _
LLKHF_ALTDOWN) Luego
Debug.Print "Alt+Tab bloqueado"
LowLevelKeyboardProc = 1
Salir de la función
Finalizar si ' kbdllhs.vkCode = VK_TAB
'Alt+Esc --------------
Si (kbdllhs.vkCode = VK_ESCAPE) Y _
CBool(kbdllhs.flags y _
LLKHF_ALTDOWN) Luego
Debug.Print "Alt+Esc bloqueado"
LowLevelKeyboardProc = 1
Salir de la función
Fin si 'kbdllhs.vkCode = VK _ESCAPE
Fin si 'nCode = HC_ACTION
LowLevelKeyboardProc = CallNextHookEx (m_hDllKbdHook, _
nCode, _
wParam, _
lParam)
Función final
i ¡No lo he probado, lo encontré en línea!
¡No lo probé, lo encontré online!