按键精灵教程:控件实现抓抓获取句柄功能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按键精灵教程:控件实现抓抓获取句柄功能
来源:按键学院【按键精灵】在按键精灵论坛上看到了一个这样的问题:能不能添加一个类似“抓抓” 抓句柄那样的控件?
有了这个控件,咱们可以放在QUI界面上,让用户自己获取窗口句柄,那么,通用同步器这类的脚本实现起来就轻松多了。
(ps:通用同步器是指能够兼容多种游戏窗口键鼠同步功能,也就是说没办法预先知道窗口的类名,标题名去获取窗口句柄,这个时候,抓抓句柄功能就很重要了。
)
其实呢,“抓抓”抓句柄的功能,实现起来是很容易的,我们一起来操作看看。
实现功能
点击图片控件之后鼠标不松开,到了需要获取句柄的窗口松开鼠标,获取窗口句柄显示在标签控件里。
(点击图片控件之后,按住鼠标左键光标形状改变,松开鼠标之后,光标恢复系统默认形状。
)
思路&步骤
1、画一个计时器。
时间间隔设置为200毫秒,有效设置为否(即:Timer1.Enabled = false)
2、在图像控件点击事件中:(图像控件中设置显示图像为:光标2.jpg )
①调用api修改光标形状为:
②将图像控件显示的图像改为:光标1.jpg ,点击之后就变为空的,就像是里面的光标跑走了一样。
③Timer1控件的Enabled属性设置为True ,启动计时器。
3、在计时器Timer事件中,使用api函数GetAsyncKeyState 检测上次按过的鼠标键,如果鼠标松开则:
①使用 MousePoint 鼠标指向窗口命令获取当前鼠标指向的窗口句柄。
②将获取到的窗口句柄显示在标签中。
③将光标形状还原成系统默认形状
④将图像控件显示的图像改为:光标2.jpg
最后将计时器Enabled属性设置为false,不可用。
修改光标要使用的api函数
数
函数功能 该函数使一个应用程序定制系统光标。
函数声明 Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam
Long, lpvParam As Any, ByVal fuWinIni As Long)
函数语法
SystemParametersinfo (uiAction , uiParam ,pvParam , fWinlni )参数说明 uiAction : 该参数指定要查询或设置的系统级。
本例子中,这个参数要取值为:SPI_SETCURSORS 功能置系统光标。
将ulParam
参数设 为0并且pvParam
设为NULL 。
ulParam : 与查询或设置的系统参数有关。
关于系统级参数的详情。
pvParam : 与查询或设置的系统参数有关。
关于系统级参数的详情。
fWinlni : 如果设置系统参数,则它用来指定是否更新用户配置文件(Prof 亦或是否要将 WM_SETTINGCHANGE 消
广播给所有顶层窗口,以通知它们新的变化内容。
本例子中,这个参数要取值为 :SPIF_SENDCHANGED 功
在更新用户配置文件之后广播消息。
判断鼠标左键按下的api 函数
调用api 函数之前,要先声明,声明部分代码如下:
Public Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
修改光标形状-代码
hCursor = LoadCursorFromFile("c:\变化.cur")'获取光标的句柄//api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中
Call SetSystemCursor(hCursor, 32512) //设置光标形状32512是系统标准光标OCR_NORMAL的常数。
恢复光标形状-代码
SystemParametersInfo 87, 0, 0, 2
// 第一个87是SPI_SETCURSORS 的常数。
第一个参数设置为SPI_SETCURSORS,第二个和第三个参数都设置为0. 第三个参数2 是SPIF_SENDCHANGED 的常数。
判断鼠标左键是否弹起
LButton = GetAsyncKeyState(1) '鼠标左键状态
If LButton =0 Then //如果鼠标左键松开
//
End If
咱们的核心代码都分析完了,现在将这些代码组合起来,看看运行效果会是怎样的。
代码
Public Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Event Form1.Timer1.Timer
LButton = GetAsyncKeyState(1) '鼠标左键状态
//RButton =GetAsyncKeyState(2) '鼠标右键状态
If LButton =0 Then //如果鼠标左键松开
hwnd=Plugin.Window.MousePoint()
bel1.Caption = hwnd
Form1.PictureBox1.Picture = "Attachment:\光标2.jpg" //图像控件图像改为光标2.jpg
SystemParametersInfo 87, 0, 0, 2 //还原光标形状
Form1.Timer1.Enabled = False
End If
End Event
Event Form1.PictureBox1.Click
hCursor = LoadCursorFromFile("c:\变化.cur")'获取光标的句柄//api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中
Call SetSystemCursor(hCursor, 32512) //设置光标形状
Form1.Timer1.Enabled = True
Form1.PictureBox1.Picture="Attachment:\光标1.jpg" //图像控件图像改为光标1.jpg
End Event
Event Form1.Load
PutAttachment "c:\","变化.cur" //释放光标文件
End Event。