• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 11
发新话题 回复该主题

[技术交流] 【院刊】-【201411期】控件实现抓抓获取句柄的功能 [复制链接]

1#

控件实现抓抓获取句柄的功能


本文按键学院提供技术支持


▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂__▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂▂_▂▂_▂▂

在论坛上看到了一个这样的问题能不能添加一个类似 “抓抓” 抓句柄那样的控件?

您所在的用户组无法下载或查看附件


有了这个控件,咱们可以放在QUI界面上,让用户自己获取窗口句柄,那么,通用同步器这类的脚本实现起来就轻松多了。

(ps:通用同步器是指能够兼容多种游戏窗口键鼠同步功能,也就是说没办法预先知道窗口的类名,标题名去获取窗口句柄,这个时候,抓抓句柄功能就很重要了。)
其实呢,“抓抓”抓句柄的功能,实现起来是很容易的,我们一起来操作看看。


[backcolor=rgb(46, 139, 87)]实现功能[backcolor=rgb(154, 205, 50)]
点击图片控件之后鼠标不松开,到了需要获取句柄的窗口松开鼠标,获取窗口句柄显示在标签控件里。(点击图片控件之后,按住鼠标左键光标形状改变,松开鼠标之后,光标恢复系统默认形状。)

[backcolor=rgb(46, 139, 87)]思路&步骤[backcolor=rgb(154, 205, 50)]

1、 画一个计时器。 时间间隔设置为200毫秒,有效设置为否( 即:Timer1.Enabled = false)

您所在的用户组无法下载或查看附件



2、 在图像控件点击事件中: (图像控件中设置显示图像为:光标2.jpg
您所在的用户组无法下载或查看附件
)


①调用api修改光标形状为:
您所在的用户组无法下载或查看附件

②将图像控件显示的图像改为:光标1.jpg
您所在的用户组无法下载或查看附件
,点击之后就变为空的,就像是里面的光标跑走了一样。


③Timer1控件的Enabled属性设置为 True ,启动计时器。




3、 在计时器Timer事件中,使用 api函数GetAsyncKeyState 检测上次按过的鼠标键,如果鼠标松开则 :
①使用 MousePoint 鼠标指向窗口 命令获取当前鼠标指向的窗口句柄。


②将获取到的窗口句柄显示在标签中。


③将光标形状还原成系统默认形状。
④将图像控件显示的图像改为:光标2.jpg
您所在的用户组无法下载或查看附件


最后将计时器 Enabled属性 设置为 false,不可用。



_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂__▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂▂_▂▂_▂▂

[backcolor=rgb(46, 139, 87)]修改光标要使用的api函数[backcolor=rgb(154, 205, 50)]


函数 SetSystemCursor
函数功能该函数使一个应用程序定制系统光标。
函数声明Public Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
函数语法SetSystemCursor(hCur, id)
参数说明hcur:替换的光标句柄。
id: 被替换的系统光标标识符。



函数 LoadCursorFromFile
函数功能 在一个指针文件或一个动画指针文件(扩展名分别是.cur和.ani)的基础上创建一个指针。
//白话解释就是:获取一个光标文件的句柄
函数声明Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
函数语法 LoadCursorFromFile("c:\变化.cur") //引号中为光标文件所在地址


函数
SystemParametersInfo
函数功能该函数使一个应用程序定制系统光标。
函数声明 Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
函数语法 SystemParametersinfo(uiAction, uiParam,pvParam, fWinlni)
参数说明uiAction: 该参数指定要查询或设置的系统级。
本例子中,这个参数要取值为:SPI_SETCURSORS 功能:重置系统光标。将ulParam参数设 为0并且pvParam参数设为NULL。
ulParam: 与查询或设置的系统参数有关。关于系统级参数的详情。
pvParam: 与查询或设置的系统参数有关。关于系统级参数的详情。
fWinlni: 如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否要将 WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。
本例子中,这个参数要取值为SPIF_SENDCHANGED 功能:在更新用户配置文件之后广播消息。

[backcolor=rgb(46, 139, 87)]判断鼠标左键按下的api函数[backcolor=rgb(154, 205, 50)]
函 数 GetAsyncKeyState
函数功能用来判断函数调用时指定虚拟键的状态。
函数声明Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
返回值GetAsyncKeyState 返回值等于1 说明键已经被按过并且当前是松开的状态
GetAsyncKeyState 返回值等于0 说明键是松开的状态
GetAsyncKeyState 返回值等于- 32767 说明键是按下的状态



调用api函数之前,要先声明,声明部分代码如下:

  1. Public Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
  2. Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
  3. Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
  4. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
复制代码
[backcolor=rgb(46, 139, 87)]修改光标形状-代码[backcolor=rgb(154, 205, 50)]
  1. hCursor = LoadCursorFromFile("c:\变化.cur")'获取光标的句柄 //api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中
  2. Call SetSystemCursor(hCursor, 32512) //设置光标形状 32512是系统标准光标OCR_NORMAL的常数。
复制代码
[backcolor=rgb(46, 139, 87)]恢复光标形状-代码[backcolor=rgb(154, 205, 50)]
  1. SystemParametersInfo 87, 0, 0, 2
  2. // 第一个 87是 SPI_SETCURSORS 的常数。第一个参数设置为SPI_SETCURSORS,第二个和第三个参数都设置为0. 第三个参数 2 是 SPIF_SENDCHANGED 的常数。
复制代码
[backcolor=rgb(46, 139, 87)]判断鼠标左键是否弹起[backcolor=rgb(154, 205, 50)]
  1. LButton = GetAsyncKeyState(1) '鼠标左键状态
  2. If LButton =0 Then //如果鼠标左键松开
  3. //
  4. End If
复制代码
▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂__▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂▂_▂▂_▂▂
咱们的核心代码都分析完了,现在将这些代码组合起来,看看运行效果会是怎样的。

[backcolor=rgb(46, 139, 87)]代码
[backcolor=rgb(46, 139, 87)]
  1. Public Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
  2. Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
  3. Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
  4. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  5. Event Form1.Timer1.Timer
  6. LButton = GetAsyncKeyState(1) '鼠标左键状态
  7. //RButton =GetAsyncKeyState(2) '鼠标右键状态
  8. If LButton =0 Then //如果鼠标左键松开
  9. hwnd=Plugin.Window.MousePoint()
  10. Form1.Label1.Caption = hwnd
  11. Form1.PictureBox1.Picture = "Attachment:\光标2.jpg" //图像控件图像改为光标2.jpg
  12. SystemParametersInfo 87, 0, 0, 2 //还原光标形状
  13. Form1.Timer1.Enabled = False
  14. End If
  15. End Event
  16. Event Form1.PictureBox1.Click
  17. hCursor = LoadCursorFromFile("c:\变化.cur")'获取光标的句柄 //api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中
  18. Call SetSystemCursor(hCursor, 32512) //设置光标形状
  19. Form1.Timer1.Enabled = True
  20. Form1.PictureBox1.Picture="Attachment:\光标1.jpg" //图像控件图像改为光标1.jpg
  21. End Event
  22. Event Form1.Load
  23. PutAttachment "c:\","变化.cur" //释放光标文件
  24. End Event
复制代码




[backcolor=rgb(46, 139, 87)]效果[backcolor=rgb(154, 205, 50)]

您所在的用户组无法下载或查看附件


录制的时候光标是录制软件的光标,看不到效果。上传Q文件,有兴趣的童鞋可以下载看看。

Q文件下载:
您所在的用户组无法下载或查看附件





您所在的用户组无法下载或查看附件

您所在的用户组无法下载或查看附件


2个月学会赚大钱的脚本

按键学院实战班



    已有6评分我要评分查看所有评分

    本主题由 管理员 兄弟客服03 于 2023/8/31 10:34:16 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    到达的到达的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

    3#

    好看好看

    4#

    学习,不错

    5#

    感谢楼主,学习下

    6#

    分辨

    地方

    7#

    下载学习

    8#


    9#

    来学习下

    10#

    56656565656565

    11#

    456467843

    12#


    13#

    真是太好了

    14#


    15#

    看内容,.。

    16#

    好强大的功能

    你笑一次,我就可以高兴好几天;
    可看你哭一次,我就难过了好几年。
    你永远也看不到我最寂寞时候的样子,
    因为只有你不在我身边的时候,
    我才最寂寞。
    17#

    学习中

    18#

    学习看一下

    19#

    天天學習天天向上

    20#

    对方的身份舒服舒服

    发新话题 回复该主题