大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 利用VB建立鼠标键盘操作回放

利用VB建立鼠标键盘操作回放

时间: 2021-07-31 作者:daque

    很多的熏陶软硬件或体例监督软硬件不妨机动记载回放用户的输出笔墨或点击按钮等操纵操纵,这个功效的实行是运用 了windows的hook因变量。正文引见怎样经过运用vb来实行鼠标键盘操纵的记录和回放。     windows供给api因变量setwindowshookex来创造一个hook,经过这个因变量不妨将一个步调增添到hook链中监督windows 动静,因变量语法为:     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     个中参数idhook指定创造的监督因变量典型。经过windows msdn扶助不妨看到,setwindowshookex因变量供给15种各别 的动静监督典型,在这边咱们将运用wh_journalrecord和wh_journalplayback来监督键盘和鼠标操纵。参数lpfn指定消 息因变量,在相映的动静爆发后,体例会挪用该因变量并将动静值传播给该因变量供处置。因变量的普遍情势为:     hookproc (code: integer; wparam: wparam; lparam: lparam): lresult stdcall;     个中code为体例引导标志,wparam和lparam为附加参数,按照各别的动静监督典型而各别。只有在步调中创造如许 一个因变量再经过setwindowshookex因变量将它介入到动静监督链中就不妨处置动静了。     在不须要监督体例动静时须要挪用供给unhookwindowshookex来废除对动静的监督。     wh_journalrecord和wh_journalplayback典型是两种差异的hook典型,前者赢得鼠标、键盘举措动静,后者回放鼠 标键盘动静。以是在步调中咱们须要创造两个动静因变量,一个用来记录鼠标键盘操纵并生存到一个数组中,另一个用来 将生存的操纵返给体例回放。     底下是简直的步调实行:开始创造一个新工程,在form第11中学介入三个commandbutton控件用来遏制动静钩子,其余还 不妨减少几何command大概textbox控件用来检查操纵回放的功效。而后在工程中减少一个模块文献,在模块中介入以次 设置和代码: option explicit public type eventmsg         message as long         paraml as long         paramh as long         time as long         hwnd as long end type public declare function callnexthookex lib "user32" _         (byval hhook as long, _         byval ncode as long, _         byval wparam as long, _         byval lparam 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 declare sub copymemoryt2h lib "kernel32" _         alias "rtlmovememory" _         (byval dest as long, _         source as eventmsg, _         byval length as long) public declare sub copymemoryh2t lib "kernel32" _         alias "rtlmovememory" _         (dest as eventmsg, _         byval source as long, _         byval length as long) public declare function unhookwindowshookex lib "user32" _         (byval hhook as long) as long public const wh_journalplayback = 1 public const wh_journalrecord = 0 public const hc_sysmodaloff = 5 public const hc_sysmodalon = 4 public const hc_skip = 2 public const hc_getnext = 1 public const hc_action = 0 public eventarr(1000) as eventmsg public eventlog as long public playlog as long public hhook as long public hplay as long public recok as long public canplay as long public bdelay as boolean public function hookproc(byval icode as long, byval wparam as long, _         byval lparam as long) as long     dim result as long          recok = 1     result = 0     if icode < 0 then   'icode小于0必需径直挪用下一个动静钩子因变量         result = callnexthookex(hhook, icode, wparam, lparam)     elseif icode = hc_sysmodalon then   '不承诺记录         recok = 0     elseif icode = hc_sysmodaloff then  '承诺记录         recok = 1     elseif ((recok > 0) and (icode = hc_action)) then         '将动静记录在记录部队中         copymemoryh2t eventarr(eventlog), lparam, len(eventarr(eventlog))         eventlog = eventlog + 1         if eventlog >= 1000 then             '当记录大于1000后开释动静钩子             unhookwindowshookex hhook         end if     end if     hookproc = result end function public function playbackproc(byval icode as long, byval wparam as long, _         byval lparam as long) as long     dim result as long          canplay = 1     result = 0     if icode < 0 then   'icode小于0必需径直挪用下一个动静钩子因变量         result = callnexthookex(hplay, icode, wparam, lparam)     elseif icode = hc_sysmodalon then   '不承诺回放         canplay = 0     elseif icode = hc_sysmodaloff then  '承诺回放         canplay = 1     elseif ((canplay = 1) and (icode = hc_getnext)) then         if bdelay then             bdelay = false             result = 50         end if         '从记录部队中掏出动静并付与lparam南针指向的eventmsg地区         copymemoryt2h lparam, eventarr(playlog), len(eventarr(eventlog))     elseif ((canplay = 1) and (icode = hc_skip)) then         bdelay = true         playlog = playlog + 1     end if          if playlog >= eventlog then         unhookwindowshookex hplay     end if     playbackproc = result end function     在form1的代码窗口中介入以次代码: option explicit private sub command1_click()     eventlog = 0     hhook = setwindowshookex(wh_journalrecord, addressof hookproc, _             app.hinstance, 0)     command2.enabled = true     command1.enabled = false end sub private sub command2_click()     unhookwindowshookex hhook     hhook = 0     command1.enabled = true     command2.enabled = false     command3.enabled = true end sub private sub command3_click()     playlog = 0     hplay = setwindowshookex(wh_journalplayback, addressof playbackproc, _             app.hinstance, 0)     command3.enabled = false end sub private sub form_load()     command1.caption = "记录"     command2.caption = "遏止"     command3.caption = "回放"     command2.enabled = false     command3.enabled = false end sub     运路途序,点击“记录”按钮,而后在textbox中输出少许笔墨大概在窗口上挪动光标后再按“遏止”键遏止动静 记录,而后按“回放”按钮,不妨看到方才鼠标键盘的操纵被涓滴不差的回放了出来。     从上头的步调不妨看到:经过wh_journalrecord不妨创造一个鼠标键盘动静钩子,当每一个鼠标键盘动静爆发时被 钩子因变量被挪用。在钩子因变量中不妨将动静生存在动静事变部队中。而后经过wh_journalplayback创造动静回放钩子, 当每一次体例不妨回放动静时就会挪用钩子因变量,在钩子因变量中就不妨从动静部队中掏出从来记录的动静归来给体例。 如许就实行了鼠标键盘操纵的记录和回放。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.