收录日期:2019/04/24 08:29:59 时间: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

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

在Redhat 9 下如何删除未安装成功的Mysql程序? 看见别人辞职散分攒人品!也来学着散一下! 关于sqlite3.dll调用问题?(希望有人回答!) 在两个对话框类之间如何进行变量传值??? 求设计方案,教学管理系统的完整方案,在线等啊有原源也可以谢谢呀!!!!!!!!!! paint问题 在ASP中怎样新建文件夹 新新手请教一个SQL语句问题.请高手进来赐教.同时祝你狗年快乐,心想事成 使用对xml排序,请问要如何加呀? 如何在window98的dos下,用dos命令下载文件? smartphone打包CAB时出现CabWiz 错误 PHP怎么实现像ASP中server.mappath那样的功能,在线等待,请大侠们帮忙 哪里有比较多的c#窗体应用程序代码下的啊 多发多给分哈........ CSDN 里的有不文明用言检查有误 谁知道语音软件 为何application变量不能是数组? 请问,有关网站管理员权限的问题:) vc6+ado+access删除表内所有记录时, 如何复位自动增加的整型字型至0? 这个页面 谁有类似能实现相同效果的代码页面 tomcat+oracle配置的问题 烦人的++ -- C语言中的语音库谁有?? 语音编程 关于desktop.ini的问题 用一个事件结束另外一个事件 紧急求助GCC的问题 关于vs2005的问题! 出100分!请问VOD视频点播怎么设计亚? 30分简单问题:如何将一个表中的两个数字字段的值相加并存到同一表的另一个字段中去? clob字段到底怎么更新