当前位置:知之问问>百科问答>按键精灵教程:控件实现抓抓获取句柄功能

按键精灵教程:控件实现抓抓获取句柄功能

2025-01-14 10:52:31 编辑:join 浏览量:526

按键精灵教程:控件实现抓抓获取句柄功能

按键精灵教程:控件实现抓抓获取句柄功能

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

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

(ps:通用同步器是指能够兼容多种游戏窗口键鼠同步功能,也就是说没办法预先知道窗口的类名,标题名去获取窗口句柄,这个时候,抓抓句柄功能就很重要了。)

其实呢,“抓抓”抓句柄的功能,实现起来是很容易的,我们一起来操作看看。

实现功能

点击图片控件之后鼠标不松开,到了需要获取句柄的窗口松开鼠标,获取窗口句柄显示在标签控件里。(点击图片控件之后,按住鼠标左键光标形状改变,松开鼠标之后,光标恢复系统默认形状。)

思路&步骤

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

2、在图像控件点击事件中:(图像控件中设置显示图像为:光标 )①调用api修改光标形状为:②将图像控件显示的图像改为:光标 ,点击之后就变为空的,就像是里面的光标跑走了一样。③Timer1控件的Enabled属性设置为True ,启动计时器。

3、在计时器Timer事件中,使用api函数GetAsyncKeyState检测上次按过的鼠标键,如果鼠标松开则:①使用MousePoint鼠标指向窗口命令获取当前鼠标指向的窗口句柄。②将获取到的窗口句柄显示在标签中。③将光标形状还原成系统默认形状

④将图像控件显示的图像改为:光标 最后将计时器Enabled属性设置为false,不可用。

修改光标要使用的api函数

函数

SetSystemCursor

函数功能

该函数使一个应用程序定制系统光标。

函数声明

PublicDeclareFunctionSetSystemCursorLib"user32"Alias"SetSystemCursor"(ByValhcurAsLong,ByValidAsLong)AsLong

函数语法

SetSystemCursor(hCur,id)

参数说明

hcur:替换的光标句柄。id:被替换的系统光标标识符。

函数

LoadCursorFromFile

函数功能

在一个指针文件或一个动画指针文件(扩展名分别是.cur和.ani)的基础上创建一个指针。//白话解释就是:获取一个光标文件的句柄

函数声明

PublicDeclareFunctionLoadCursorFromFileLib"user32"Alias"LoadCursorFromFileA"(ByVallpFileNameAsString)AsLong

函数语法

LoadCursorFromFile("c:\变化.cur")//引号中为光标文件所在地址

函数

SystemParametersInfo

函数功能

该函数使一个应用程序定制系统光标。

函数声明

PublicDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByValuActionAsLong,ByValuParamAsLong,lpvParamAsAny,ByValfuWinIniAsLong)

函数语法

SystemParametersinfo(uiAction,uiParam,pvParam,fWinlni)

参数说明

uiAction:该参数指定要查询或设置的系统级。本例子中,这个参数要取值为:SPI_SETCURSORS功能:重置系统光标。将ulParam参数设为0并且pvParam参数设为NULL。ulParam:与查询或设置的系统参数有关。关于系统级参数的详情。pvParam:与查询或设置的系统参数有关。关于系统级参数的详情。fWinlni:如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否要将WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。本例子中,这个参数要取值为:SPIF_SENDCHANGED功能:在更新用户配置文件之后广播消息。

判断鼠标左键按下的api函数

函数

GetAsyncKeyState

函数功能

用来判断函数调用时指定虚拟键的状态。

函数声明

PrivateDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsInteger

返回值

GetAsyncKeyState返回值等于1说明键已经被按过并且当前是松开的状态GetAsyncKeyState返回值等于0说明键是松开的状态GetAsyncKeyState返回值等于-32767说明键是按下的状态

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

PublicDeclareFunctionSetSystemCursorLib"user32"Alias"SetSystemCursor"(ByValhcurAsLong,ByValidAsLong)AsLong

PublicDeclareFunctionLoadCursorFromFileLib"user32"Alias"LoadCursorFromFileA"(ByVallpFileNameAsString)AsLong

PublicDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByValuActionAsLong,ByValuParamAsLong,lpvParamAsAny,ByValfuWinIniAsLong)

PrivateDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsInteger

修改光标形状-代码

hCursor=LoadCursorFromFile("c:\变化.cur")'获取光标的句柄//api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中

CallSetSystemCursor(hCursor,32512)//设置光标形状32512是系统标准光标OCR_NORMAL的常数。

恢复光标形状-代码

SystemParametersInfo87,0,0,2

//第一个87是SPI_SETCURSORS的常数。第一个参数设置为SPI_SETCURSORS,第二个和第三个参数都设置为0.第三个参数2是SPIF_SENDCHANGED的常数。

判断鼠标左键是否弹起

LButton=GetAsyncKeyState(1)'鼠标左键状态

IfLButton=0Then//如果鼠标左键松开

//

EndIf

咱们的核心代码都分析完了,现在将这些代码组合起来,看看运行效果会是怎样的。

代码

PublicDeclareFunctionSetSystemCursorLib"user32"Alias"SetSystemCursor"(ByValhcurAsLong,ByValidAsLong)AsLong

PublicDeclareFunctionLoadCursorFromFileLib"user32"Alias"LoadCursorFromFileA"(ByVallpFileNameAsString)AsLong

PublicDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByValuActionAsLong,ByValuParamAsLong,lpvParamAsAny,ByValfuWinIniAsLong)

PrivateDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsInteger

EventForm1.Timer1.Timer

LButton=GetAsyncKeyState(1)'鼠标左键状态

//RButton=GetAsyncKeyState(2)'鼠标右键状态

IfLButton=0Then//如果鼠标左键松开

hwnd=Plugin.Window.MousePoint()

Form1.Label1.Caption=hwnd

Form1.PictureBox1.Picture="Attachment:\光标2.jpg"//图像控件图像改为光标2.jpg

SystemParametersInfo87,0,0,2//还原光标形状

Form1.Timer1.Enabled=False

EndIf

EndEvent

EventForm1.PictureBox1.Click

hCursor=LoadCursorFromFile("c:\变化.cur")'获取光标的句柄//api加载光标文件,不能直接加载按键附件中的文件,需释放到电脑盘符中

CallSetSystemCursor(hCursor,32512)//设置光标形状

Form1.Timer1.Enabled=True

Form1.PictureBox1.Picture="Attachment:\光标1.jpg"//图像控件图像改为光标1.jpg

EndEvent

EventForm1.Load

PutAttachment"c:\","变化.cur"//释放光标文件

EndEvent

标签:控件,句柄,按键精灵

版权声明:文章由 知之问问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.zhzhwenwen.com/answer/362139.html
热门文章