hola
Con VB6 usando
SetWindowsHookEx no hay problema, funciona a la perfección. Pero en VB.Net no funciona. Cuando se llama a SetWindowsHookEx se obtiene un ID, que es un número largo. Ese numero cambia cada vez que se llama a SetWindowsHookEx de modo que una vez bloqueado para desbloquear el teclado, es necesario usar el mismo ID con que se bloqueó con UnhookWindowsHookEx.
https://www.daniweb.com/software-development/vbnet/threads/427872/disable-windows-key-on-keyboard-when-application-is-runningEl caso es que encontré la forma de obtener el Id con SetWindowsHookEx en VB.Net, sin embargo NO BLOQUEA EL TECLADO, pero con VB6 sí. No se porqué.
Para VB.Net se necesita el triple de código, y como se puede ver en VB6 el código es muy reducido.
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Const WH_KEYBOARD = 2
Private X() As Long
Dim Dm As Long
Private Sub Command1_Click()
'Bloquear teclado
ReDim X(Dm)
X(Dm) = SetWindowsHookEx(WH_KEYBOARD, AddressOf WinProcKeyBoard, App.hInstance, App.ThreadID)
Dm = Dm + 1
'Nota: La tecla windows y Ctrl+Alt+Supr seguirán activos
End Sub
Private Sub Command2_Click()
'Desbloquear teclado
UnhookWindowsHookEx X(0)
End Sub
Private Sub Form_Load()
Command1.Caption = "Bloquear teclado"
Command2.Caption = "Desbloquear teclado"
End Sub
'===========================================
'///////////////////////////////////////////
'A TENER EN CUENTA ANTES DE USAR
'Al pulsar Command1 SetWindowsHookEx se
'obtiene un ID que es introducido en X.
'Este hilo es un número tal como 1442617; 2229059;...; etc
'El primer valor X, supongamos por ejemplo 1442617,
'es el ÚNICO VALOR QUE PUEDE DESBLOQUEAR EL TECLADO
'mediante UnhookWindowsHookEx (al pulsar en Command2)
'de modo que si se sigue pulsando command1, X irá adquiriendo
'nuevos valores que YA NO SERVIRÁN PARA DESBLOQUEAR,
'X perderá su valor original (1442617 en este caso ejemplo)
'y habrá que cerrar sesión o reiniciar windows para
'volver a disponer del teclado.
'Para evitar eso, he creado un array en X
'De modo que el primer valor queda fijado en X(0)
'Los siguientes valores (si se sigue pulsando Command1)
'se irán introduciendo en X(1),X(2),..,X(n)
'///////////////////////////////////////////
'===========================================