我贴一贴我的代码吧,这段代码倒是能成功不失去焦点,不过却也会使其它程序出错:-(((((((((( model1: Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim lKey As Long Dim strKeyName As String * 255 Dim strLen As Long
' If code = HC_ACTION Then ' CopyMemory keyMsg, lParam, LenB(keyMsg) ' Select Case wParam ' Case WM_SYSKEYDOWN, WM_KEYDOWN, WM_SYSKEYUP, WM_KEYUP, WM_MOUSEACTIVATE, WM_MOUSEFIRST, _ ' WM_MOUSEHOVER, WM_MOUSELEAVE, WM_MOUSELAST, WM_MOUSEMOVE, WM_MOUSEWHEEL: ' ' CallKeyHookProc = 1 '屏蔽按键 ' ' End Select ' End If If code = HC_ACTION Then If wParam = WM_ACTIVATE Then lKey = GetActiveWindow() SetActiveWindow (lKey) CallKeyHookProc = 1 End If End If If code <> 0 Then CallKeyHookProc = CallNextHookEx(0, code, wParam, lParam) End If End Functionform1: '安装钩子 Public Sub AddHook() lHook(0) = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf CallKeyHookProc, App.hInstance, 0) lHook(1) = SetWindowsHookEx(WH_CALLWNDPROCRET, AddressOf CallKeyHookProcAfter, App.hInstance, 0) '键盘钩子 ' lHook(0) = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0) ' lHook(1) = SetWindowsHookEx(WH_MOUSE_LL, AddressOf CallKeyHookProc, App.hInstance, 0) End Sub '卸钩子 Public Sub DelHook() UnhookWindowsHookEx lHook(0) UnhookWindowsHookEx lHook(1) End Sub Private Sub Command1_Click() Call AddHook Sleep (15000) Call DelHook End Sub
form2.Show vbModal
不停的bringwindowtotop
Private Sub Form_LostFocus()End Sub
然后使用bringwindowtotop
或者其他的使某个窗体获得焦点的API 我帮你查查啊
可是问题本程序运行没问题,可是其它程序,如explorer,taskmgr等运行不正常了........
form1.setfocus
end sub'在失去焦点事件中让form1再获得焦点,这样他就永远都拥有焦点了,但其它的任何都不在可用
Private Sub Form_GotFocus()
Me.SetFocus
End SubPrivate Sub Form_LostFocus()
Me.SetFocus
End Sub
form1.show 1
我理解的表现形式:自己程序活动时,系统应处于死机状态,不响应任何操作。理论上只有独占系统资源才行(DirectX程序有点象,但在NT内核中也会被最小化的)。这可能需与Windows内核,斗斗法,看谁能抢过谁。当然自已编个操作系统应该也能解决。^_^
model1:
Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lKey As Long
Dim strKeyName As String * 255
Dim strLen As Long
' If code = HC_ACTION Then
' CopyMemory keyMsg, lParam, LenB(keyMsg)
' Select Case wParam
' Case WM_SYSKEYDOWN, WM_KEYDOWN, WM_SYSKEYUP, WM_KEYUP, WM_MOUSEACTIVATE, WM_MOUSEFIRST, _
' WM_MOUSEHOVER, WM_MOUSELEAVE, WM_MOUSELAST, WM_MOUSEMOVE, WM_MOUSEWHEEL:
'
' CallKeyHookProc = 1 '屏蔽按键
'
' End Select
' End If
If code = HC_ACTION Then
If wParam = WM_ACTIVATE Then
lKey = GetActiveWindow()
SetActiveWindow (lKey)
CallKeyHookProc = 1
End If
End If
If code <> 0 Then
CallKeyHookProc = CallNextHookEx(0, code, wParam, lParam)
End If
End Functionform1:
'安装钩子
Public Sub AddHook()
lHook(0) = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf CallKeyHookProc, App.hInstance, 0)
lHook(1) = SetWindowsHookEx(WH_CALLWNDPROCRET, AddressOf CallKeyHookProcAfter, App.hInstance, 0)
'键盘钩子
' lHook(0) = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
' lHook(1) = SetWindowsHookEx(WH_MOUSE_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
End Sub
'卸钩子
Public Sub DelHook()
UnhookWindowsHookEx lHook(0)
UnhookWindowsHookEx lHook(1)
End Sub
Private Sub Command1_Click()
Call AddHook
Sleep (15000)
Call DelHook
End Sub
其实上边的代码没有问题,只不过需要编译成一个DLL,而不是EXE就可以了.
谢谢谢谢大家.