错误博客( cuowu.com )发布于 2019-06-08 21:12:58

按键精灵窗口插件

按键精灵窗口插件,Window插件使用频率非常高。它主要是用于获取窗口信息和对窗口进行一些基本操作,共32个命令。使用这些命令,可以获得很多特别的功能。

在介绍命令前必须先介绍一个名词——句柄。

句柄是指用一个唯一的整数值,来标记应用程序中的不同对象和同类对象中的不同实例。例如:一个窗口,一个按钮,滚动条或者是文件等。脚本可以通过向这个句柄发送消息,从而控制窗口的移动、关闭等基本操作,并且每个窗口的句柄是创建时由系统分配的,每次打开程序,这个句柄都不一样。本插件中的命令均是对句柄进行操作的,所以在使用命令前必须先获取句柄。

窗口分为主窗口和子窗口,每个窗口都有一个句柄。例如按键精灵软件,最外层的就是主窗口,它的句柄就是主窗口句柄。而软件上的菜单、按钮等就是这个窗口下面的子窗口,用于表示他们的句柄称为子窗口句柄。

获取窗口句柄

在Window插件中的获取句柄命令总共有7个,获取句柄命令如下:

获取窗口句柄

1)查找指定窗口句柄命令(Find)

Find命令是通过窗口的类名和标题来查找顶层的窗口句柄,Find命令如下:

Find命令

可以用抓抓来获取窗口的类名和标题信息:打开抓抓工具并切换到句柄标签,这时在界面的右半部分就是当前桌面下的所有主窗口信息,抓抓句柄树如下图所示,包含它们的句柄、类名和标题。点开上面的“+”号,就可以查看它的子窗口信息。

抓抓句柄树

句柄获取之后,可以在左侧看到类名和标题。

句柄获取

利用这个数据,我们可以用Find命令查找这个窗口的句柄,编辑脚本如下:

Hwnd = Plugin.Window.Find(“Notepad”,”Adobe Photoshop CS6″)

TracePrint “Hwnd=” & Hwnd

此外,这两个参数仅填写一个也是可以找到句柄的。不需要的参数或内容为空时,对应的参数用0代替。例如:

Hwnd = Plugin.Window.Find(0,”Adobe Photoshop CS6″)

Hwnd = Plugin.Window.Find(“Notepad”,0)

2)查找子窗口句柄命令(FindEx)

FindEx 命令如下:

FindEx 命令

FindEx 命令是用于查找子窗口句柄的。

例如:查找记事本编辑区域的子窗口句柄。

打开一个记事本,然后看抓抓“句柄”标签右半部分的句柄树,在里面找到“无标题 – 记事本”的窗口句柄,展开即可看到它里面的子窗口句柄信息,如下图。记事本里面只有一个子窗口,用鼠标右键点击该句柄,选择查看句柄信息,可以看到这里的子窗口标题是空的,类名是“Edit”。

记事本的子窗口

有了这些数据就可以编辑脚本了。注意:FindEx命令的第2个参数是“子窗口句柄”,如果这个句柄前面没有子窗口就填0。脚本如下:

Hwnd = Plugin.Window.Find(0,”无标题 – 记事本”)

TracePrint “主窗口句柄 Hwnd=” & Hwnd

HwndEx1=Plugin.Window.FindEx(Hwnd,0,”Edit”,0)

TracePrint “查找到的子窗口句柄为:” & HwndEx1

进入调试,启动脚本,调试输出的句柄跟抓抓上显示的值是一样的。

主窗口句柄 Hwnd=1053990

查找到的子窗口句柄为:5380088

3)遍历窗口句柄命令(Search)

在实际应用当中,经常会有向多个窗口句柄发送消息的需要。但有时这些窗口标题名是一样的,用Find命令只能找到其中一个窗口句柄,如果希望找到所有窗口句柄,就需要运用Search命令了。Search命令的功能是搜索符合指定窗口标题的所有窗口句柄,最后返回找到的窗口句柄。Search命令如下:

Search命令

例如:遍历同标题的窗口句柄并一一输出句柄。

  • 打开两个同标题的记事本窗口,如下图所示:

 

  • Search的命令是通过标题模糊搜索窗口句柄,所以这里在Search的参数里面填“无标题 – 记事本”或者是“记事本”都可以搜索到句柄。脚本如下:

HwndEx = Plugin.Window.Search(“无标题 – 记事本”)

TracePrint “查找到符合的窗口句柄为:” & HwndEx

进入调试,启动脚本,就可以在调试信息里面看到这两个窗口的句柄了。

查找到符合的窗口句柄为:986402|68854|

接下来用Split命令将这些句柄拆分出来,然后一一输出。

这里把HwndEx的值以“|”符号为边界拆分成2个句柄,脚本如下:

HwndEx=Plugin.Window.Search(“无标题-记事本”)

TracePrint “查找到符合的窗口句柄:” & HwndEx

MyArray = Split (HwndEx,”|”)

If UBound(My Array) >=0 Then

For i = 0 To UBound(MyArray)

TracePrint “第” & i + 1 & “个窗口句柄为:” & MyArray(i)

Next

End If

4)遍历符合窗口(增强)命令(SearchEx)

SearchEx命令如下:

遍历符合窗口

SearchEx命令和Search命令的效果是一样的,所不同的是SearchEx命令还可以通过窗口类名搜索,以及选择不同的搜索方式。

5)得到当前窗口的句柄命令(Foreground)

Foreground命令如下:

Foreground

得到当前窗口的句柄,也就是当前处于激活状态的主窗口的句柄。例如:

Hwnd = Plugin.Window.Foreground()

TracePrint “当前窗口的句柄=” & Hwnd

进入调试,启动脚本。这时获取的就是按键精灵编辑窗口的句柄。

6)得到鼠标指向的窗口句柄命令(MousePoint)

MousePoint命令如下:

MousePoint

通过这个命令可以获取鼠标当前指向的窗口句柄,如果鼠标指向的位置是子窗口,那么获取的是子窗口的句柄。如果鼠标指向的是主窗口那么获取到的是主窗口的句柄。所以,相比其他命令,MousePoint得到鼠标句柄要更直接。例如:

7)得到可以发送按键消息的窗口句柄命令(GetKeyFocusWnd)

GetKeyFocusWnd命令如下:

GetKeyFocusWnd命令

这个命令和Foreground命令类似,当Foreground命令无法获取当前窗口句柄的时候,可以使用这个命令尝试一下。

以上就是7个获取句柄的命令,Window插件里面的所有命令都是基于句柄进行操作的。由于命令众多,这里就不一一介绍了。


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训、抖音培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码