Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 891|回复: 9

如何抓取鼠标位置?

[复制链接]
发表于 2022-1-8 21:52 | 显示全部楼层 |阅读模式
a列获取鼠标坐标位置,b列放所在坐标位置的系统时间
需要用到api
大神帮帮忙!
发表于 2022-1-9 01:30 | 显示全部楼层
Public Type POINTAPI
    x As Long
    y As Long
End Type
Private Declare Function GetCursorPosition Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
回复

使用道具 举报

发表于 2022-1-9 11:06 | 显示全部楼层
leolee82 发表于 2022-1-9 01:30
Public Type POINTAPI
    x As Long
    y As Long

64位的office用不了
回复

使用道具 举报

发表于 2022-1-10 01:04 | 显示全部楼层
4938613666 发表于 2022-1-9 11:06
64位的office用不了

到MSDN上查一下 改成占用相同内存空间的数据类型就行了
不熟的话建议使用32位office
如果32位office不满足要求的话就建议开发专业软件来处理业务了
回复

使用道具 举报

发表于 2022-1-10 12:13 | 显示全部楼层
如果是点击鼠标判断的话特定情形下可以不用api
回复

使用道具 举报

 楼主| 发表于 2022-1-10 16:46 | 显示全部楼层
leolee82 发表于 2022-1-9 01:30
Public Type POINTAPI
    x As Long
    y As Long

实时的鼠标位置呢?怎么写程序?
回复

使用道具 举报

 楼主| 发表于 2022-1-10 16:47 | 显示全部楼层
大灰狼1976 发表于 2022-1-10 12:13
如果是点击鼠标判断的话特定情形下可以不用api

不用api,可以得到光标的桌面位置吗?
怎么写?

回复

使用道具 举报

发表于 2022-1-10 19:52 | 显示全部楼层
lzr122 发表于 2022-1-10 16:46
实时的鼠标位置呢?怎么写程序?

比较通用的就用SetWindowsHookEx,下面两种都行
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseHookProc, OfficeApp.hInstance, 0)
hMouseHook = SetWindowsHookEx(WH_MOUSE, AddressOf MouseHookProc, OfficeApp.hInstance, 0)
代码要封装到dll中。
参考:
SetWindowsHookExA function (winuser.h) - Win32 apps | Microsoft Docs

WH_MOUSE_LL HOOK的大概框架如下
Private 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                                                                     '设置钩子
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hMouseHook As Long) As Long    '注消钩子,用完后一定要注销

Private Declare Function CallNextHookEx Lib "user32" (ByVal hMouseHook As Long, ByVal ncode As Long, _
        ByVal wParam As Long, lParam As Any) As Long '如果有其它钩子,则继续执行

'Private Type POINTAPI
'    x As Long
'    y As Long
'End Type
Private Type MSLLHOOKSTRUCT
     pt As POINTAPI
     mouseData As Long
     flags As Long
     time As Long
     dwExtraInfo As Long
End Type

Private Const WM_MOUSEWHEEL = &H20A

Private Function MouseHookProc(ByVal ncode As Long, ByVal wParam As Long, lParam As MSLLHOOKSTRUCT) As Long

'收到WM_MOUSEMOVE消息时写入光标坐标数据
    MouseHookProc = CallNextHookEx(hMouseHook, ncode, wParam, lParam) '如果有其它钩子,则继续执行,不然要出错

End function

回复

使用道具 举报

 楼主| 发表于 2022-1-12 17:57 | 显示全部楼层
代码要封装到dll中,这个封装没有弄过,必须要用dll吗?
直接放vba模块不行吗?
回复

使用道具 举报

 楼主| 发表于 2022-1-14 19:56 | 显示全部楼层
leolee82 发表于 2022-1-10 19:52
比较通用的就用SetWindowsHookEx,下面两种都行
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf ...

代码要封装到dll中,这个封装没有弄过,必须要用dll吗?
直接放vba模块不行吗?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-1 03:15 , Processed in 0.454508 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表