vb模拟鼠标按键 比如按Q就变成右键各位大大帮帮忙

vb模拟鼠标按键比如按Q或E就变成右键要在其他窗口也能用的有人说怎么用hook,弄个线程监视键盘输入,对Q键按下这个事件进行监控,当监测到空格键按下就运行调用函数,给指定... vb模拟鼠标按键比如按Q或E就变成右键
要在其他窗口也能用的
有人说怎么用hook,弄个线程监视键盘输入,对Q键按下这个事件进行监控,当监测到空格键按下就运行调用函数,给指定窗体发送鼠标右键点击的消息
可是我是VB菜鸟刚学的,各位大大帮帮满给编代码我复制下。。
如果能详细介绍每一条代码的用处的话在加50分
还有不要有去网上找了,我找了一下午5555~
模拟鼠标右键单击事件是不是
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 怎么有2条....郁闷,看不懂
我是VB菜鸟刚学的,各位大大帮帮忙给编代码,让我复制下。。
要在其他程序也能用的
如果能详细介绍每一条代码的用处的话在加50分
展开
 我来答
yangyingjun999
2011-04-30 · TA获得超过1230个赞
知道小有建树答主
回答量:782
采纳率:0%
帮助的人:410万
展开全部
你那两行代码:
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
是模拟单击左键,
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
是模拟单击右键。
当“用hook”时才可以进行后台模拟点击、即vb模拟后台点击必须使用Hook技术才能做到。在当前应用程序启动时而且受点击的窗体必须是活动的(最上层)情况下要模拟点击是比较简单的。
你上面的描述有点看不大明白,什么“vb模拟鼠标按键比如按Q或E就变成右键”?像是要实现快捷键哦?
追问
嗯,是啊,我要设置Q为快捷键,按一下快捷键就实现右键单击一下,还有怎么用hook啊?直接把给代码写出来吧,我是VB菜鸟
追答
看你确实非常需要,我还是给你定义一个简单的Hook钩子(钩子本身是非常复杂的)吧,请看
■ 首先新建一个模块,并复制下列代码过去:
Option Explicit
Public hHook As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
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 Const WH_KEYBOARD_LL = 13
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Public Type EVENTMSG
vKey As Long
sKey As Long
flag As Long
time As Long
End Type
Public MyMsg As EVENTMSG
Public Const WM_KEYDOWN = &H100
Public Function MyKBHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode = 0 Then
If wParam = WM_KEYDOWN Then
CopyMemory MyMsg, ByVal lParam, Len(MyMsg)
If MyMsg.vKey = 81 Or MyMsg.vKey = 113 Then
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
MyKBHook = -1
End If
End If
End If
MyKBHook = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function

■ 然后在你的“首启动窗体”的Form_Load()事件下添加如下代码(加载钩子):
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf MyKBHook, App.hInstance, 0)

■ 最后在你的关闭窗体的卸载事件Form_Unload事件下添加如下代码(卸载钩子):
UnhookWindowsHookEx hHook

■ OK,这样就给你定义好了一个非常稳定的“Q键完全等效于鼠标右键”的钩子了,只要本代码运行,在整个电脑所有程序中都可通用。限于篇幅,无法给你做出解释了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
web2014
2011-05-01
知道答主
回答量:18
采纳率:0%
帮助的人:0
展开全部
在窗体Form1,添加一Timer1控件,重要!Timer1.InterVal=2,代码:
Private Sub Timer1_Timer()
'MsgBox GetKeyState(vbKey2)
If GetKeyState(vbKeyShift) = -128 Then
MkeyEvent 1
ElseIf GetKeyState(vbKeySpace) = -128 Then
MkeyEvent 2
End If

End Sub
在工程添加一个标准模块,把一下代码复制进去:
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
'按键截取
Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
'鼠标按键模拟
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwmilliseconds As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键释放
Const MOUSEEVENTF_MIDDLEDOWN = &H20 '模拟鼠标中间键按下
Const MOUSEEVENTF_MIDDLEUP = &H40 '模拟鼠标中间键释放
Const MOUSEEVENTF_RIGHTDOWN = &H8 '模拟鼠标右键按下
Const MOUSEEVENTF_RIGHTUP = &H10 '模拟鼠标右键释放

Public Function MkeyEvent(Mkey As Integer)
'mkey的值设置:1为左键,2为右键
If Mkey = 1 Then
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 5
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
ElseIf Mkey = 2 Then
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
Sleep 5
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End If

End Function
实验:运行程序,按下并弹起Shift键即可发生一个鼠标左键Click,按下并弹起空格键即可产生一个鼠标右键Click,注意不要一直按住不放否则可能导致连锁反应。
追问
用是能用了可是按shift键怎么会变成左键连击不止一下,代码里一定有不足的地方,还有帮忙说一下
Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
和GetKeyState(vbKeyShift) = -128 Then
还有Timer1.InterVal=2
MkeyEvent 1的意思
我会在加50分给你的
追答
好的,Declare ...就是声明调用一个DLL(*.dll动态链接库)函数,括号里面的数函数的参数,每个函数的参数可能都不同!
GetKeyState(vbKeyShift) = -128是调用了User32动态库的API函数,直接字面意思为取得键状态,这句GetKeyState(VbKeyShift)=-128的意思是取得Shift键的状态,调用GetKeyState()会返回一个值,如果这个值是-128则表示Shift键被按下(另外返回-127表示键弹起)!
MkeyEvent()是我们自己定义的一个函数,Public Function MkeyEvent(Mkey As Integer),Mkey这个是表示要被模拟的鼠标按键,调用该MkeyEvent函数时需要给出Meky参数值。MkeyEvent 1 是省略了括号而直接写参数值,这个是Vb6语法允许的,在Vb.NET则不可以。也可以写成
Call MkeyEvent(1)。
不知道有没有解决LZ的疑问了?

参考资料: 科技程序迷

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fafa_12184155
2011-05-03 · TA获得超过613个赞
知道小有建树答主
回答量:797
采纳率:0%
帮助的人:606万
展开全部
LZ解决问题了没有?如果没有的话,我给你写个更简单的??```
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heyzol
2011-05-06 · TA获得超过265个赞
知道小有建树答主
回答量:307
采纳率:0%
帮助的人:139万
展开全部
找找api函数,很多的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式