win10下调用mouse_event的API函数,无法识别Or连接,代码混乱。

dai2248157327 2021-01-10 01:07:31
win10下调用mouse_event的API函数,无法识别Or连接,代码混乱。
win10下调用mouse_event函数,进行移动鼠标操作,发现执行命令,无法实现移动。

代码如下:

Private Declare Sub mouse Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long '获取分辨率
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '指定鼠标使用绝对坐标系,此时,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
Private Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
Private Sub shubiaoyidong(ByVal x As Long, ByVal y As Long)
mw = x* 65535 / GetSystemMetrics32(0)
mh = y * 65535 / GetSystemMetrics32(1)
'移动
mouse MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, mw, mh, 0, 0
End Sub
Sub test()
shubiaoyidong 998, 745
End Sub

点击宏运行后,发现鼠标在win10下无法移动,无法执行命令,这里不知道出了什么问题?

如何将Or改成符号&,则虽然可以这些命令,但是执行命令过程中会实现鼠标右键点击的功能,出现执行混乱的情况,代码不能正常执行,请问大神能找出问题在哪么?我问过相关的经验人员也不能给出合理回答,请各位大神老师帮忙指点一下!
...全文
915 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
prophetk 2023-05-30
  • 打赏
  • 举报
回复 1

不用这么麻烦 这一句改成 Private Const MOUSEEVENTF_ABSOLUTE = &H8000& 即可
后面加个& 代表长整型

dai2248157327 2021-03-29
  • 打赏
  • 举报
回复
脆皮大雪糕,真是大师级别的水准,佩服的五体投地,这个一定是对C语言和VB语言理论基础知识非常了解,而且不是一般通晓编程的。这里给您深鞠一躬,表示感谢!
vansoft 2021-01-15
  • 打赏
  • 举报
回复
楼上威武,向你学习。
脆皮大雪糕 2021-01-11
  • 打赏
  • 举报
回复 1
哈哈哈哈,这个问题也曾经困扰我。 下面讲讲原因,嫌烦直接看最后解决办法。 你是看了API文档了吧 ,而且看了C语言的调用样例了吧。
const int MOUSEEVENTF_MOVE = 0x0001;      移动鼠标
const int MOUSEEVENTF_ABSOLUTE = 0x8000; 标示是否采用绝对坐标
然后按照绝对坐标移动就是
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);
翻译成VB代码
Public Const MOUSEEVENTF_MOVE = &H1 '  mouse move
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 '  absolute move

mouse_event(MOUSEEVENTF_ABSOLUTE  or  MOUSEEVENTF_MOVE, 500, 500, 0, 0)
然后就不灵光了。觉得匪夷所思,直接帮忙算了一下 MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE = &H8000 or &H1 = &H8001 直接把&H8001写进代码
mouse_event(&H8001, 500, 500, 0, 0)
还是不灵光!!!! 根本的原因在于:VB里十六进制表达结果的自动类型转换。能用两个字节的情况就转成integer,如果超过两个字节不到4个字节的情况转成long。在内存价格高的90年代这种做法是聪明的合理的。但是我们抄C代码的时候要多个心眼。VB的整形都是有符号的。&H8001在转换为intger的时候最高位的符号位是1!!!变成了负数。API调用的时候这个参数要传长整形,于是转换的过程中这个长整形也是负数…… 接下来你在立即窗口里连续做几个试验: print &H8001 :得到-32767 而不是 你想要的 32769 print val(&H8001) : 得到的还是 -32767 而不是 你想要的 32769 print hex(&H8001): 得到 8001 这个看上去理所当然。 print hex(-32767):得到 8001 如果上面三行好理解那么这个也好理解了。 print hex(32769):得到 8001 有没有想骂娘?但你又骂不出来,这个也对啊。 print hex(val(&H8001)):得到 FFFF8001 不是你想像的8001,想掀桌子了是吧(╯‵□′)╯︵┻━┻ 这就是你调用失败的原因!! 废话那么多,如果脑袋一时半会儿绕不过来,直接给解决方法: 直接用十进制声明一个常量
Public Const MOUSEEVENTF_ABSOLUTE_MOVE = 32769 '适用于VB的绝对移动参数
接下来直接调用这个常数:
mouse_event(MOUSEEVENTF_ABSOLUTE_MOVE , 500, 500, 0, 0)
「已注销」 2021-01-10
  • 打赏
  • 举报
回复
为什么在Win10下无效不清楚,你可以尝试将其暂时改为 Call Mouse(&H8001,mw,mh,0,0) 理论讲Or不可能不能识别(&H8001 = &H8000 Or &H1) 或者尝试更换参数试一下 另 Or是位运算,&是字符连接符,其意义应该是不一样的 与Or相对应的是And Xor Not这三个 此处Or表示 采取绝对坐标模拟鼠标移动 不明白你为什么想将Or改为 & 具体,你可以尝试写一个程序输出 Or 连接、&连接、与And连接的结果,看一下区别
作为Microsoft 32位平台的应用程序编程接口, Win32 API是从事Windows应用程序开发所必备的。 首先对Win32 API函数做完整的概述;然后收录五大类函数: 窗口管理、图形设备接口、系统服务、国际特性以及网络服务; 在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 控件与消息函数 共91个函数 硬件与系统函数 共98个函数 设备场景函数 共73个函数 绘图函数 共105个函数 位图、图标和光栅运算函数 共39个函数 菜单函数 共37个函数 文本和字体函数 共41个函数 打印函数 共66个函数 文件处理函数 共118个函数 进程和线程函数 共40个函数 Windows消息函数 共11个函数 网络函数 共14个函数 目 录 第一章 Win32 API概论…………………………………………………………………………1 1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述………………………………………………………………………………………11 第二章 窗口管理函数(Windows Control Function) ……………………………………13 2.1 易用特性函数(Accessibility Features)…………………………………………13 2.2 按钮函数(Button)……………………………………………………………………20 2.3 插入标记(^)函数(Caret)…………………………………………………………21 2.4 组合框函数(Combo box) ……………………………………………………………24 2.5 通用对话框函数(Common Dialog Box) ……………………………………………25 2.6 标函数(Cursor)………………………………………………………………………36 2.7 对话框函数(Dialog Box)……………………………………………………………40 2.8 编辑控制函数(Edit Control)………………………………………………………54 2.9 图标函数(Icon)………………………………………………………………………54 2.10 键盘加速器函数(Keyboard Accelerator)……………………………………… 61 2.11 键盘输入函数(Keyboard InPut) …………………………………………………63 2.12 列表框函数(List box) ……………………………………………………………75 2.13 菜单函数(Menu) ……………………………………………………………………76 2.14 消息和消息队列函数(Message and Message Queue)……………………………90 2.15 鼠标输入函数Mouse Input) ……………………………………………………100 2.16 多文档接口函数(Multiple Document Interface) ……………………………103 2.17 资源函数(Resource)………………………………………………………………105 2.18 滚动条函数(Scroll Bar)…………………………………………………………113 2.19 窗口函数(Window)…………………………………………………………………119 2.20 窗口类函数(Window Class)………………………………………………………144 2.21 窗口过程函数(Window Procedure)………………………………………………150 2.22 窗口属性函数(Window Property) ………………………………………………152 第三章 图形设备接口函数(Graphic Device Interface Function) …………………155 3.1 位图函数(Bitmap) …………………………………………………………………155 3.2 笔刷函数(Brush)……………………………………………………………………171 3.3 剪切函数(Clipping) ………………………………………………………………176 3.4 颜色函数(Color)……………………………………………………………………179 3.5 坐标空间与变换函数(Coordinate Space Transformation)……………………186 3.6 设备环境函数(Device Context) …………………………………………………195 3.7 填充形态函数(Filled shape) ……………………………………………………211 3.8 字体和正文函数(Font and Text)…………………………………………………215 3.9 ICM 2.0函数 …………………………………………………………………………238 3.10 线段和曲线函数(Line and Curve)………………………………………………295 3.11 图元文件函数(Metafile)…………………………………………………………300 3.12 多显示器函数(Multiple Display Monitors) …………………………………311 3.13 绘图函数和画图函数(Painting and Drawing)…………………………………313 3.14 路径函数(Path)……………………………………………………………………328 3.15 画笔函数(Pen) ……………………………………………………………………332 3.16 打印及打印假脱机程序函数(Printing and Print Spooler)…………………334 3.17 矩形函数(Rectangle) ……………………………………………………………371 3.18 区域函数(Region)…………………………………………………………………374 第四章 系统服务函数(System Service Function) ……………………………………383 4.1 访问控制函数(Access Control) …………………………………………………383 4.2 原子函数(Atom) ……………………………………………………………………406 4.3 客户/服务器访问控制函数(Client/Server Access Control) ………………409 4.4 剪贴板函数(Clipboard)……………………………………………………………431 4.5 通信函数(Communication)…………………………………………………………436 4.6 控制台函数(Console)………………………………………………………………444 4.7 数据解压库函数(Data Decompression Library) ………………………………463 4.8 调试函数(Debugging)………………………………………………………………466 4.9 设备输入输出函数(Device Input and Output)…………………………………472 4.10 动态数据交换函数(Dynamic Data Exchange) …………………………………474 4.11 动态数据交换管理函数(Dynamic Data Exchange Management)………………476 4.12 动态链接库函数(Dynamic-Link Library)………………………………………489 4.13 错误函数(Error) …………………………………………………………………496 4.14 事件日志函数Event Logging) …………………………………………………499 4.15 文件函数(File)……………………………………………………………………503 4.16 文件安装库函数(File Installation Library) ………………………………542 4.17 文件映射函数(File Mapping)……………………………………………………546 4.18 文件系统函数 File System)………………………………………………………551 4.19 句柄和对象函数(Handle and Object)………………………………………………556 4.20 挂钩函数(Hook)………………………………………………………………………560 4.21 ImageHlp函数…………………………………………………………………………572 4.22 大整数操作函数(Iarge Integer Operations)……………………………………594 4.23 低层访问控制函数(Low-Level Access Control)………………………………596 4.24 LSAPI函数 …………………………………………………………………………617 4.25 邮槽函数(Mailslot)………………………………………………………………622 4.26 内存管理函数(Memory Management) ……………………………………………623 4.27 管道函数(Pipe) …………………………………………………………………655 4.28 电源管理函数(Power Management) …………………………………………… 663 4.29 进程和线程函数(Process and Thread)…………………………………………666 4.30 注册表函数(Registry)……………………………………………………………700 4.31 字符串操作函数(String Manipulation)……………………………………… 724 4.32 结构化异常处理函数(Structured Exception Handling) ……………………742 4.33 同步函数(Synchronization) ……………………………………………………745 4.34 系统信息函数(System Information)……………………………………………766 4.35 系统消息函数(System Message)…………………………………………………780 4.36 系统关机函数(System Shutdown) ………………………………………………781 4.37 磁带备份函数(Tape Backup) ……………………………………………………783 4.38 时间函数(Time)……………………………………………………………………789 4.39 计时器函数(Timer) ………………………………………………………………795 4.40 工具帮助函数(Tool Help) ………………………………………………………796 4.41 窗口站和桌面函数(Window Station and Desktop)……………………………799 4.42 Windows NT 4.0访问控制函数(Window NT 4.0 Access-Control)……………808 4.43 WinTrust函数(WinTrust)…………………………………………………………814 第五章 国际特性函数(International Peatures Punction)时性…………………………815 5.1 输入方法编辑函数(Input Method Editor)…………………………………………815 5.2 国家语言支持函数(National Language Support)………………………………… 828 5.3 Unicode和字符集函数(Unicode and Character Set)……………………………… 843 第六章 网络服务函数(Networding Service Function)……………………………………849 6.1 数据链路控制函数(DLC)………………………………………………………………849 6.2 网络函数(Net)…………………………………………………………………………849 6.3 NetBIOS函数……………………………………………………………………………896 6.4 网络DDE函数(Networking DDE)……………………………………………………897 6.5 RAS服务器管理函数(RAS Server Administration)………………………………901 6.6 远程访问服务函数(Remote Access Administration)………………………………910 6.7 服务函数(Service)……………………………………………………………………929 6.8 Windows网络函数(Windows Networking)……………………………………………930 附录1 如何在VB中调用DLL API ……………………………………………………………945 1 DLL API的声明……………………………………………………………………………945 2 DLL API调用……………………………………………………………………………947 附录2 在Delphi中直接调用Windows API…………………………………………………953

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧