我用钩子程序来捕获,tab键消息,但是当切换到别的窗口的时候,必须将钩子程序关闭,我做的是当vb窗口失去焦点的时候,关闭钩子程序,可是当使用crl+c,拷贝东西,然后再用Alt + Tab返回vb程序的时候,被拷贝东西的文本,或work就会被关闭,应该怎样解决这个问题???
先多谢各位大虾.....
先多谢各位大虾.....
解决方案 »
- vb串口接收2进制数的问题
- 读中文TXT文件?
- dtpicker的属性问题
- 特大新闻:具查:daisy8675(莫依)有个妹妹......
- 在win2000/XP系统下如何锁键盘?
- Ado记录集的MovePrevious问题,提示:“Run-time error'3219';在此环境中不允许操作。”
- vb6中 left() 的问题
- 请问用winsock编的这段小程序为什么连续执行两次就会提示“地址正在使用”???
- 键盘上的左右“win键”和“菜单键”的virtual-key code 是多少?
- 对波形滤波
- 一个sql小问题..............................
- api函数如何传递PSECURITY_ATTRIBUTES?
Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
说明
获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口
返回值
Long,前台窗口的句柄
注解
windows nt支持多个桌面,它们相互间是独立的。每个桌面都有自己的前台窗口
===================================
加个TIMER控件,对比一下你钩的窗体和GetForegroundWindow得到的是不是一个句柄。
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal _
wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As LongPublic 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 LongPublic Const WM_NCACTIVATE = &H86
Public Const GWL_WNDPROC = (-4)
Public OldWndProc&Public Function Hook&(ByVal hWnd1&)
OldWndProc = SetWindowLong(hWnd1, GWL_WNDPROC, AddressOf NewWndProc)
Hook = OldWndProc
End FunctionPublic Sub UnHook(ByVal hWnd1&)
SetWindowLong hWnd1, GWL_WNDPROC, OldWndProc
End SubPublic Function NewWndProc&(ByVal hWnd1&, ByVal uMsg&, ByVal wParam&, ByVal lParam&)
If uMsg = WM_NCACTIVATE Then
If wParam = 0 Then '失去焦点
Debug.Print "失去焦点" '可以在这里写钩子程序停止的代码
Else
Debug.Print "窗口获得焦点"
End If
End If
NewWndProc = CallWindowProc(OldWndProc, hWnd1, uMsg, wParam, lParam)
End Function'窗体中的代码Private Sub Form_Load()
Hook Me.hWnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHook Me.hWnd
End Sub