永发信息网

请教,如何用vb实现模拟鼠标中键滚动!

答案:2  悬赏:0  手机版
解决时间 2021-03-16 13:29
用mouse_event可以模拟鼠标左中右键点击,但我找不到中键滚动如何用,请大侠指教一下。
最佳答案
用API函数mouse_event可以做到
函数及常数声明:

Public 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)
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down
Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up
Public Const MOUSEEVENTF_MOVE = &H1 ' mouse move
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down
Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up
Public Const MOUSEEVENTF_WHEEL = &H800

测试代码:建立一个窗体,加一个按钮和一个timer
Option Explicit

Private Sub Command1_Click()
Timer1.Interval = 5000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Dim i As Integer
For i = 0 To 100
DoEvents
mouse_event MOUSEEVENTF_WHEEL, 0, 0, 10, 0
Next
For i = 0 To 100
DoEvents
mouse_event MOUSEEVENTF_WHEEL, 0, 0, -10, 0
Next

End Sub
全部回答
可以通过hook ,但是调试的时候ide容易挂掉,记住保存 下面是模块代码 option explicit '模块代码 '*********************************************************** 'mmousewheel '鼠标滚轮的事件检测 '*********************************************************** private declare function callwindowproc lib "user32" alias "callwindowproca" (byval lpprevwndfunc as long, byval hwnd as long, byval msg as long, byval wparam as long, byval lparam as long) as long private declare function setwindowlong lib "user32" alias "setwindowlonga" (byval hwnd as long, byval nindex as long, byval dwnewlong as long) as long private const gwl_wndproc = -4 private const wm_mousewheel = &h20a global lpprevwndproca as long public bmouseflag as boolean                                                    '鼠标事件激活标志 public sub hookmouse(byval hwnd as long)     lpprevwndproca = setwindowlong(hwnd, gwl_wndproc, addressof windowproc) end sub public sub unhookmouse(byval hwnd as long)     setwindowlong hwnd, gwl_wndproc, lpprevwndproca end sub private function windowproc(byval hw as long, byval umsg as long, byval wparam as long, byval lparam as long) as long     select case umsg     case wm_mousewheel                                                          '滚动         dim wzdelta, wkeys as integer         'wzdelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),         '大于零表示滚轮向前滚动(朝显示器方向)         wzdelta = hiword(wparam)         'wkeys指出是否有ctrl=8、shift=4、鼠标键(左=2、中=16、右=2、附加)按下,允许复合         wkeys = loword(wparam)         '--------------------------------------------------         if wzdelta < 0 then             小于零表示滚轮向后滚动(朝用户方向)         else             '大于零表示滚轮向前滚动(朝显示器方向)         end if         'if getactivewindow() = f_set.hwnd then                                           'end if         '--------------------------------------------------     case else         windowproc = callwindowproc(lpprevwndproca, hw, umsg, wparam, lparam)     end select end function private function hiword(longin as long) as integer     hiword = (longin and &hffff0000) \ &h10000                                  '取出32位值的高16位 end function private function loword(longin as long) as integer     loword = longin and &hffff&                                                 '取出32位值的低16位 end function
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
煤气灶可以改为天然气吗
红楼梦:概述金训之死的经过
vivo X9怎么批量卸载应用
烙糖饼为什么硬
亚中路/珠江南路(路口)怎么去啊,有知道地址
用将来时和正在进行时写两段英语对话
三灶火车票代售点在什么路上
重庆市歇台子国宾豪庭2期属于渝中区还是九龙
千禧照相彩扩冲印部这个地址在什么地方,我要
“忱”白话如何发音
寻找英语故事!!!!!!!!!!
我手机收到信息,但屏幕上没有显示信息
李嘉欣在那个电影被捆绑了呀急!
手机开了热点,别的设备都能正常上网,到我的
思xx泉(是一个成语,XX处填什么?)
推荐资讯
家中有小偷又不想家人知道怎样偷录视频用什么
不得不中的得怎么读?"得"再这里是必须的意思,
我们班要进行辩论会 主题 猪八戒好处多还是坏
描写冬天优美的句子。
汽车打火钥匙门头两下没反应最后拉不着,拉十
28岁还没结婚怎么办
我在微信上认识一个女孩。最近这个女孩失恋了
丽江龙记斑鱼庄我想知道这个在什么地方
孜然脆骨的做法,孜然脆骨怎么做好吃,孜然脆
城西菜场我想知道这个在什么地方
做甜米酒的米,是蒸的还是煮的?
比亚迪f6三菱4g69发动机 温度高 就熄火 然后
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?