| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 725 人关注过本帖
标题:如何限制鼠标和键盘操作
只看楼主 加入收藏
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
如何限制鼠标和键盘操作
如何限制鼠标和键盘操作? 我想实现当我的程序运行时不再允许对键盘和鼠标进行操作,程序运行完后再恢复正常操作。谢谢大家
搜索更多相关主题的帖子: 键盘 如何 
2014-05-09 12:13
tw_love_code
Rank: 2
来 自:chongqing
等 级:论坛游民
威 望:2
帖 子:34
专家分:97
注 册:2012-7-7
收藏
得分:5 
你是想实现类似于 电子教室 那种功能么?

失踪几年,我又回来啦
2014-05-09 13:36
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 2 楼 tw_love_code
我不是很了解电子教室的功能,我想实现的是:



.......
开始限制
For i to 10

i=i+1
next

解除限制
2014-05-09 13:49
vbhello
Rank: 2
等 级:论坛游民
帖 子:17
专家分:15
注 册:2014-5-9
收藏
得分:5 
对于限制鼠标你可以用mouse_event
在timer事件里
Call mouse_event(MOUSEEVENTF_MOVE, -Me.ScaleWidth, Me.ScaleHeight, 0, 0)
或者用ShowCursor
ShowCursor true/false
解除限制的时候记住要ShowCursor true
至于限制键盘,这个我也不是很了解,不过网上有一些资料说用HOOK可以实现。
2014-05-09 14:37
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 4 楼 vbhello
谢谢,我试了网上的一些方法,但只能限制软件本身,不能实现全局限制,继续等待大家解答....
2014-05-09 14:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:3 
限制全局,好像要使用 驱动级 的操作。
光靠VB好像无法实现。

授人于鱼,不如授人于渔
早已停用QQ了
2014-05-09 17:07
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:1 
好像有这方面的消息钩子可以实现,没涉足过,百度下可以找的到好多的。
2014-05-09 18:46
vbhello
Rank: 2
等 级:论坛游民
帖 子:17
专家分:15
注 册:2014-5-9
收藏
得分:6 
下面是键盘的限制(来源:网上搜的),至于鼠标的限制看4楼,把鼠标限制在屏幕的边缘区。如果你想限制鼠标的左右键,那估计也得需要用hook了。
鼠标的左右功能键的相关参数:
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205

程序代码:
'模块代码
Option Explicit
Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public 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_KEYBOARD_LL = 13
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public hHook As Long
Type tagKBDLLHOOKSTRUCT
    vkCode       As Integer         
    scanCode     As Integer       
    flags        As Long  
    Time         As Long   
    dwExtraInfo  As Long 
End Type

Sub EnableHook()     '设置拦截
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub

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

Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
    Dim kk As tagKBDLLHOOKSTRUCT
    Dim kb As Long, pks As Byte
    CopyMemory kk, lParam, Len(kk)
    Myfunc = 1: Exit Function
    Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function
'窗体代码
Option Explicit

Private Sub Form_Load()
    Call EnableHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call DisableHook
End Sub


[ 本帖最后由 vbhello 于 2014-5-10 19:32 编辑 ]
2014-05-10 19:28
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
谢谢vbhello,今本解决了我的问题,再次感谢大家!
2014-05-15 16:06
快速回复:如何限制鼠标和键盘操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032740 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved