Private Sub Form_Load()
iTabCount = 4
EnableKBDHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookKBD
End Sub
Private Sub Text1_GotFocus()
hwndTextBox = Text1.hWnd
End Sub
Private Sub Text1_LostFocus()
hwndTextBox = 0
End Sub
有一模块,代码如下:
Option Explicit
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
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2
Public hwndTextBox As Long
Public iTabCount As Integer
Public Sub UnHookKBD()
If hnexthookproc <> 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End Sub
Public Function EnableKBDHook()
If hnexthookproc <> 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
MyKBHFunc, App.hInstance, 0)
If hnexthookproc <> 0 Then
EnableKBDHook = hnexthookproc
End If
End Function
Public Function MyKBHFunc(ByVal iCode As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
'这三个叁数是固定的,不能动,而MyKBHFunc这个名称只要和
'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽
MyKBHFunc = 0
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If wParam = vbKeyTab Then '侦测 有没有按到PrintScreen键
If hwndTextBox = Form1.Text1.hWnd Then
MyKBHFunc = 1
'Debug.Print "haha"
'form1.Text1
Form1.Text1.SelStart = IIf(Form1.Text1.SelStart + iTabCount < VBA.Len(Form1.Text1.Text), Form1.Text1.SelStart + iTabCount, VBA.Len(Form1.Text1.Text))
End If
End If
End Function