VB驱动级模拟鼠标点击

看了网上关于以WinIO库模拟键盘事件的文章,便想把这种技巧用到鼠标事件上来。以前操作鼠标一直用SetCursorPos()控制光标位置,效率虽低,总算还可以忍受,但模拟鼠标单击用的API是mouse_event(),其效率之低实在令人无法满意,而PostMessage()因为使用时需要提供句柄,又太不方便。偶得此方,仔细进行了论证和实验,发现效果十分理想。

  有一些使用DirectX接口的程序,在读取鼠标操作时绕过了Windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,要求以最快速度响应鼠标输入。由于Windows消息是队列形式的,消息在传递时会有不少延迟,达不到游戏的要求。而DirectInput则绕过了Windows消息,直接与鼠标驱动程序打交道,效率当然提高了不少。因此也就造成,对这样的程序无论用PostMessage()或者是mouse_event()都不会有反应,因为这些函数都在较高层。对于这样的程序,只好用直接读写鼠标端口的方法来模拟硬件事件了。

  在DOS时代,当用户按下或者放开一个键时,就会产生一个键盘中断(如果键盘中断是允许的),这样程序会跳转到BIOS中的键盘中断处理程序去执行。打开windows的设备管理器,可以查看到键盘控制器由两个端口控制。其中&H60是数据端口,可以读出键盘数据,而&H64是控制端口,用来发出控制信号。也就是,从&H60号端口可以读此键盘的按键信息,当从这个端口读取一个字节,该字节的低7位就是按键的扫描码,而高1位则表示是按下键还是释放键。当按下键时,最高位为0,称为通码,当释放键时,最高位为1,称为断码。既然从这个端口读数据可以获得按键信息,那么向这个端口写入数据就可以模拟按键了!用过QbASIC4.5的朋友可能知道,QB中有个OUT命令可以向指定端口写入数据,而INP函数可以读取指定端口的数据。那我们先看看如果用QB该怎么写代码:
假如你想模拟按下一个键,这个键的扫描码为&H50,那就这样
OUT &H64,&HD2       '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据
OUT &H60,&H50       '把扫描码&H50发送到&H60端口,表示模拟按下扫描码为&H50的这个键
那么要释放这个键呢?像这样,发送该键的断码:
OUT &H64,&HD2       '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据
OUT &H60,(&H50 OR &H80)       '把扫描码&H50与数据&H80进行或运算,可以把它的高位置1,得到断码,表示释放这个键

  这篇文章使用WinIO来写入硬件端口,让我想起了从前的DOS时代,在那时,读写硬件端口何其方便。然而,我转而使用VB之后,在Windows下直接操作底层端口变成了美好的回忆(当然,也因为很少有必要)。

  废话少说,查阅资料得知,要操作鼠标缓冲区,须先向0x64端口写入KBC指令0xD3,表示要写入,再向0x64写入扫描码。扫描码0x09代表鼠标左键按下,0x08代表鼠标左键放开。写代码如下:

'====================声明部分====================
Private Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Private Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Private Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Private Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
'================================================
Private Sub Form_Load()
If InitializeWinIo = False Then
     '用InitializeWinIo函数加载驱动程序,如果成功会返回true,否则返回false
    MsgBox "驱动程序加载失败!"
    Unload Me
End If
Timer1.Interval = 3000
Timer1.Enabled = True
End Sub

 

Private Sub Form_Unload(Cancel As Integer)
    ShutdownWinIo '程序结束时用ShutdownWinIo函数卸载驱动程序
End Sub

Private Sub Timer1_Timer()
    ClickMouse
End Sub

Private Sub ClickMouse()
    SetKey &HD3, &H9
     SetKey &HD3, &H0
     SetKey &HD3, &H0
    
     SetKey &HD3, &H8
     SetKey &HD3, &H0
     SetKey &HD3, &H0
End Sub

Private Sub SetKey(Typ, ScanCode)
    KBCWait4IBE        ‘根据KBC规范,在向键盘端口写入数据前要等待一段时间
    SetPortVal &H64, Typ, 1     '写入KBC指令
    KBCWait4IBE
    SetPortVal &H60, ScanCode, 1 '写入扫描码
End Sub

Private Sub KBCWait4IBE()       '等待缓冲区为空
    Dim dwVal As Long
     Do
     GetPortVal &H64, dwVal, 1
        '这句表示从&H64端口读取一个字节并把读出的数据放到变量dwVal中
        'GetPortVal函数的用法是GetPortVal 端口号,存放读出数据的变量,读入的长度
     Loop While (dwVal And &H2)
End Sub

  该程序为实验所用,仅作实例,在WinXP Home Edition,VB6下测试通过。

使用powershell/vbs自动化模拟鼠标点击操作 今天想做windows上的自动化,所以才有了模拟鼠标点击的需求,先考虑用powershell实现: 首先先安装一个名为“WASP”免费可用的Powershell扩展程序,下载地址:http://wasp.codeplex.com/ 下载解压之后放到C:\Windows\System32\WindowsPowerShell\v1.0\Modules\下,如图: 之后,在开始->运行处... 阅读详情

相关推荐

VB 加载winIO,实现驱动级键盘模拟

最近用VB做外挂,模拟鼠标实现自动化操作。发现驱动级模拟,一直存在问题。今天终于解决了,记录下. --------------------------------------------------------------------------------- 系统环境:win7 64位,VB 32位 winIO环境: 3.0环境 下载地址:www.internals.com -

活在当下 乐在其中 9548

WinIO:一个底层的键盘事件模拟工具

当我们需要程序模拟键盘事件时,通常会这样写: C:keybd_event JAVA:robot.keyPress 但是在某些情况下,这么写并不能实现需求,例如用程序在密码框输入字符等。 安全检测机制比较完善时,是不允许程序模拟键盘输入的。 此时调用通常的程序模拟键盘事件的方法,就会不起作用,被安全机制拦截了。 这时可以考虑使用WinIO。 ==================================== WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内

BHSZZY的博客 4120

VB6 VBFlexGrid模拟超链接实现点击删除行功能

在桌面应用开发中,表格控件是展示和操作数据的核心组件。其原理是通过网格结构管理行列数据,并响应用户交互事件。掌握表格控件的深度定制技术,能极大提升软件界面的交互性与数据操作效率,具有重要的技术价值。这在企业级应用、数据管理系统等需要高效数据维护的场景中尤为关键。本文聚焦于VB6环境下的VBFlexGrid控件,针对其缺乏内置超链接功能的问题,详细解析了如何通过模拟超链接样式与事件处理,实现点击单元格删除整行并动态更新表格的实用方案,其中涉及性能优化和事件处理等关键热词。

靓靓软件工作室 332

C# WinIO对I/O端口和物理内存进行存取操作

C#的WinIO操作,InitializeWinIo、ShutdownWinIo、GetPortVal、SetPortVal、GetPhysLong、SetPhysLong、MapPhysToLin、UnmapPhysicalMemory。 举了个实例,从内存读取BIOS版本号

u011465910的博客 2304

VB.NET 模拟鼠标点击:3种API(mouse_event/SendInput/PostMessage)性能与兼容性对比

本文深入解析了VB.NET中三种模拟鼠标点击的API(mouse_event、SendInput、PostMessage)的性能与兼容性差异。通过详细的代码示例和基准测试数据,对比了各API在精确度、可靠性、权限要求和应用场景适配等方面的表现,为Windows自动化开发提供技术选型参考。特别针对模拟鼠标操作中的常见问题提供了解决方案和优化策略。

weixin_30522983的博客 519

VB编程实现鼠标模拟点击与实时坐标追踪工具

本文还有配套的精品资源,点击获取 简介:本文介绍了一个基于Visual Basic(VB)的工具,该工具可以模拟鼠标左键点击,并实时获取鼠标的坐标位置。通过理解VB的基础知识和事件驱动编程,读者可以学习如何捕捉鼠标移动事件并获取坐标,使用 SendKeys 函数模拟鼠标点击,以及利用定时器控件实现坐标的实时更新。用户可通过此工具自定义点击次数和循环模式,实现自...

weixin_35019679的博客 1210

vb鼠标操作代码

Text1.Text = “鼠标横坐标为:” & Point.X & vbCrLf & vbCrLf & “鼠标纵坐标为:” & Point.Y。Text1.Text = “鼠标横坐标为:” & Point.X & vbCrLf & vbCrLf & “鼠标纵坐标为:” & Point.Y。Text1.Text = “鼠标横坐标为:” & Point.X & vbCrLf & “鼠标纵坐标为:” & Point.Y。If KeyAscii = 32 Then '如果按下的是空格键,注意空格Asc码是32。

qq_32257509的博客 2609

VB编程实现鼠标按键精灵与坐标获取

Visual Basic(简称VB)是一种简单易学、功能强大的编程语言,它是基于Windows平台的可视化编程工具。VB被广泛应用于快速应用程序开发(RAD),尤其适合初学者和希望快速构建界面的应用开发。API,即应用程序编程接口(Application Programming Interface),它是一组预先定义的函数,这些函数为开发者提供了一个接口来实现一些常见的功能,比如操作系统级别的任务处理、硬件设备的访问等。在Windows操作系统中,API为开发者提供了与系统底层交互的通道。

weixin_42509720的博客 1157

VB模拟一次鼠标事件

使用API函数mouse_event可以模拟一次鼠标事件,比如左键单击、双击和右键单击等。这个实例利用此函数产生了十分有趣的效果,无论鼠标处于屏幕的任何位置,每隔一秒程序会使鼠标在那个位置单击或双击一次,这会给我们造成什么样的混乱呢?试一试就知道了。 -------------------------------------------模拟鼠标的左键单击和右键单击---------------

changleqy的专栏 3358

WinIO驱动级键鼠库,包含WinIo全套.dll.sys及实例

WinIO驱动级键鼠库,包含WinIo全套WinIO32.dll,WinIO64.dll,WinIO32.sys,WinIO64.sys及实例

winio驱动级模拟键盘鼠标 64位可用-易语言

winio驱动级模拟键盘鼠标 64位可用

模拟鼠标键盘操作,含硬件模拟技术

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的...

weixin_33774615的博客 4455

VB驱动级别模拟winio带键盘和鼠标的例子

里面已经有做好的程序.winio的3个文件要复制到vb目录和windows/system32目录下.

一个驱动级别的 键盘鼠标模拟工具

http://www.ddxoft.com/

lyl117363的博客 2万+

从入门到精通:dirmap 高级 Web 目录扫描实战指南

本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。

rnn9storyteller的博客 479

【PLL】分频器设计权衡:从CMOS到CML的电路实现与优化

本文深入探讨了PLL中分频器的设计权衡,比较了CMOS和CML两种电路实现的优缺点。通过实际案例分析,展示了如何在速度、功耗和噪声之间取得平衡,特别是在5G射频芯片和Wi-Fi 6E等高频应用中的优化实践。文章还提供了混合架构设计和电源噪声协同优化的实用技巧,适合电路设计工程师参考。

weixin_42521843的博客 441

易语言dd驱动模拟按键模块_DD驱动 虚拟键盘 虚拟鼠标

最简单好用的驱动级虚拟鼠标虚拟键盘支持 WINXP , WIN2003 , WIN2008 , VISTA , WIN7 ,32位和64位操作系统。适用 VB6, DELPHI, VC, BC, VB.NET, C#, 易语言等各种编程语言写的应用程序调用。一键安装和卸载,实现模拟按键操作只需加载DD入口文件DD_EntryNNNNN.dll ,然后调用接口函数即可。个人桌面应用和游戏工作室装机必...

weixin_39745013的博客 5056

python爬取巨潮资讯网所有股票年报数据

爬虫获取巨潮资讯网数据

qq_42752524的博客 6109

用VB模拟键盘事件的N种方法

     键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应

VxD 3246

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1881

Ubuntu20.04下Docker无缝升级实战指南

本文提供了一份在Ubuntu20.04系统上安全、无缝升级Docker的实战指南。文章详细阐述了升级前的版本检查、数据备份等准备工作,逐步演示了通过APT包管理器进行升级或指定版本安装的操作步骤,并强调了升级后的验证与常见问题回滚方案,确保业务容器平稳过渡。

postgres8guard的博客 478

驱动级键盘模拟(C#)

游戏外挂一般分为三个级别:初级是鼠标、键盘模拟,中级是Call游戏内部函数,读写内存,高级是抓包,封包的“脱机挂”(完全模拟客户端网络数据,不用运行游戏)。用C#写外挂的不是很多,大部分是C++,主要原因是MS的C#目前不支持内联汇编功能。因此用C++写底层库,然后用C#调用成为DONET爱好者开发外挂的首选。       对于鼠标键盘模拟的外挂而言,很多人认为没有什么技术含量,因为无非就是

zdrl的专栏 1万+

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 90
上一篇: 鼠标类函数
下一篇: VB 外挂
yeuegi
博客等级 码龄19年 17粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值