收录日期:2019/01/21 20:17:40 时间:2016/05/23 01:58:01 标签:控件
Windows中如何获取键盘和鼠标处于空闲状态的时间?
在一个timer控件中设一个变量比如stay,每秒加一,如果加到30就说明30秒鼠标没动过了。
用钩子函数,如果接收到鼠标或者键盘响应,就让stay=0
模块代码如下:
'以下程序是在Module1.bas内
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
'idHook参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
'lpfn参数代表Hook函数的位址
'hmod代表.dll的hInstance
'dwThreadId代表执行拦截的ThreadId
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 Const WH_KEYBOARD = 2
Public Const WH_MOUSE = 0
Public hHook As Long
Public mHook As Long
Public Stay As Integer

Sub EnableHook() '定义EnableHook
'设置拦截
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf Myfunc, App.hInstance, 0)
mHook = SetWindowsHookEx(WH_MOUSE, AddressOf Myfunc, App.hInstance, 0)
End Sub

Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
ret = UnhookWindowsHookEx(mHook)
End Sub

Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
 On Error GoTo ER
Stay = 0
Myfunc = 1
Exit Function
ER: MsgBox "错误号是:" & Err.Number
End Function


窗体代码如下:
Private Sub Form_Load()
EnableHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
DisableHook
End Sub

Private Sub Timer1_Timer()
Stay = Stay + 1
Label1.Caption = Stay
If Stay = 10 Then
    MsgBox "鼠标键盘已有10秒未相应"
    Stay = 0
End If
End Sub

我刚会用钩子函数,有什么不对的地方,请高手指点。

我出生了两次 转贴,搞笑! 我为什么去不到我的adaptername?求助 (请看程序) 现在最多给100分吗? Label类或者jLabel类可否支持鼠标双击事件响应?谢谢 该数据如何处理 怎么输出中文? 急急急!金额如何转换为人民币大写? 软盘0磁道修复问题???怎么样才能恢复软盘数据 关于在客户端用javascript写文件的问题,怎么不要提示也正确执行?谢谢各位了 调用DELPHI中自带的报表控件,预览后如何不再显示所画报表格式,直接退出窗口? 在线秒钟等待:关于弹出窗口 问一个鼠标响应的问题? 一个关于ADOQuery的问题,急 请大家帮帮我:用WINZIP压缩文件后,把压缩密码忘记了。 这句话错在哪儿了?答出即给分 关于odbc数据源动态加载 爆------笑 我想用键盘上的按键控制Internet Explorer浏览器的前进,后退,刷新,停止等,应该是用IWebBrowser2 但我如何将它指向桌面获得焦点的Internet 如何隐藏页面的菜单 如何为document建一个表格视图?并可以编辑表格每个单元格,修改document? 小鸡过河的算法,100分求解。 向数据库添加数据的代码怎么写?菜鸟的一个问题,急! 请各位大虾帮我写个SQL语句,在线等,急急急急急急急急! 怎样才能让你的程序漂亮一点点呢?怎样才能换皮肤?它就是答案! 求小鸡过河的算法,答对给100分。 如何取得当前Dll的路径? 一个简单的存储过程,希望各位帮忙:) C++可视化开发中关于图标的一个问题。 请帮忙帮忙!!! 在DataGrid中用以下两种方式有什麽区别?