Hola, lo podes hacer con Hook
en un modulo
Option Explicit
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Integer, lParam As Any) As Long
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 Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Const WH_KEYBOARD_LL As Long = 13
Private Const WM_SYSKEYDOWN As Long = &H104
Private hHook As Long
Public Function HookKeyboard() As Boolean
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Hook_Proc, App.hInstance, 0)
End Function
Public Function UnHookKeyboard()
UnhookWindowsHookEx hHook
End Function
Function Hook_Proc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
If wParam = WM_SYSKEYDOWN Then
If lParam = vbKeyTab Then
If GetKeyState(164) < -1 Then
Hook_Proc = 1
Exit Function
End If
End If
End If
Hook_Proc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Option Explicit
Private Sub Form_Load()
HookKeyboard
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookKeyboard
End Sub