2024年4月6日发(作者:)

窗口插件增强版详解

361 度 2011-01-27

这里不是讲解插件中每个函数的运用,而是说明一些函数的设计初衷和一

些高级应用。

当然使用插件时不用受设计初衷的限制,但我不希望,使用者连设计初衷

都不知道。因为那样的话,这个插件本该有的能力都没发挥,使用者很可能只

学会了利用其中一小部分功能而已。所以就有了这篇文章。这篇文章相当于对

插件函数说明的补充。

首先要声明的是,最近看到有人说这个插件是针对QQ类游戏设计的,其

实没这种事情,这个插件其它游戏也一样用,一样可以解决其它游戏因为游戏

的自我保护而取不到窗口句柄等问题。可能是因为我在论坛帖子中说这个插件

可以取到QQ类游戏的句柄,导致有人认为这个能力仅限于QQ类游戏。为了防

止又有人误传,这里再强调下,这个插件的功能不局限于取窗口句柄,其它功

能也有不少花了我很多时间去研究和设计才做出来的。

GetForegroundWindow、GetForegroundFocus、GetMousePointWindowS、

GetPointWindowS、EnumWindow

A、EnumWindowT:

该插件中取窗口句柄的有关函数GetForegroundWindow、

GetForegroundFocus、GetMousePointWindowS、GetPointWindowS、

EnumWindow

A、EnumWindowT均可取到被游戏自我保护屏蔽的窗口句柄。其中

EnumWindowA和EnumWindowT的过滤条件使用65536才可以找到被游戏自我

保护屏蔽的窗口。该插件配套命令库中的取窗口句柄的几个函数都是用这些函

数实现,所以都能取到被游戏自我保护屏蔽的窗口句柄。

EnumWindowA 和 EnumWindowT:

EnumWindowA和EnumWindowT的参数较复杂,详细的见插件函数说明,

这里对他们的窗口标题和类名的模糊搜索用例子演示下。对于这两个函数,第4

个参数过滤条件的值如果使用1可以使用标题的模糊搜索,如果使用2可以使

用类名的模糊搜索。模糊搜索使用"?

和"*

进行,"?

代表一个任意字符,"*

代 表0个或者多个任意字符。比如窗口标题为“游戏名称版本号

或者“游戏名

称角 色名

等形式,窗口标题的内容就不是固定的,这个时候使用标题的模糊

搜索就 可以解决兼容问题。这里以用按键精灵的窗口标题模糊搜索按键精灵为

例,这 里用其中一个版本的按键精灵进行分析,这个版本的按键精灵未注册时

标题显 示为“按键精灵

8.20.7866版(免费版)

,注册后显示为:

"按键精灵

8.20.7866版(会员版)注册码有效期:14:19:51已激活:922992次

,按

键精灵各版本的版本号是不同的,要解决兼任不同版本的问题,版本号的部分

要用"*

或"?

代替,版本后面有显示免费版,有显示会员版,为了各种情况

都能 搜索到,这里也要用“*

或"?

代替,所以模糊搜索在标题的参数处可以

写为"按 键精灵*版仁相同的部分最好尽量保留下来,这样不容易找错,如果用

“按键精 灵*

,打开按键精灵论坛时,搜索到的窗口句柄中,浏览器的窗口句

柄也会被 包括进去。

示范(按键精灵

8、窗口插件增强版V

5.00):

HwndArray = Plugin,WindowEx

ndowT("按键精灵*版 *",0,0,0,1)

〃如果像有些游戏一样因为有自我保护而无法找到窗口句柄,过滤条件就

要 用65536, //和过滤条件中的标题模糊一起用,要做或运算,这样写:

//HwndArray = Ex

ndowT("按键精灵*版 *",0,0,0,1 Or 65536)If UBound(HwndArray)=-1

Then

MsgBox "按键精灵窗口未找到",4096

Else

MsgBox "找到按键精灵窗口

窗口句柄:

"& HwndArray

(0), 4096

End If

SetFakeActive:

窗口假激活函数SetFakeActive主要用于解决部分游戏后台画面不刷新的问

题,也可解决部分游戏后台键盘鼠标在前台用有效但后台无效的问题。

CreateTextRgn、CreatePictureRgn、CreateCustomRgn、CreateButton:

CreateTextRgn、CreatePictureRgn、CreateCustomRgn、CreateButton 可用

SetWindowState和SetWindowOpacity实现置顶、透明、鼠标传透等效果,遗憾

的是透明和鼠标穿透不能对子窗口单独产生效果,所以当CreateTextRgn、

CreatePictureRgn、CreateCustomRgn、CreateButton 的父窗口句柄不为 0 时,就

不能用透明和鼠标穿透了。

CreateButton:

CreateButton是为了在脚本运行中控制和多开游戏时对每个游戏单独控制而

设计的,比如可以让某一个游戏窗口的脚本控制启动、暂停等等,而不影响其

它游戏窗口。

CreateTextRgn和CreateButton综合应用的例子(按键精灵

8、窗口插件增强版V

5.00),文本区域被设置为置顶、透明、鼠标穿透:

Dim ButtonArray

ButtonArray

(0)="A 状态

ButtonArray

(1) ="B 状态

ButtonArray

(2) ="C 状态

ButtonArray

(3) ="D 状态

hwndButton=Ex

Button(0,10,20,100,30)

Call Ex

ton(hwndButton,ButtonArray)

hwndText = Ex

TextRgn(0,10,60,200,20)

Call Ex

dowState(hwndText,8)

Call Ex

dowOpacity(hwndText,0,150,1)

While True

index=Plugin,WindowEx

,,

,,

,,

,,

tonState(hwndButton)

str="按钮值

"& index & "按钮内容

"& ButtonArray(index)

Call Plugin,WindowEx

xtRgnString(hwndText,str)

Delay 200

Wend

Sub OnScriptExit()

Call Ex

dowState(hwndButton,0)

Call Ex

dowState(hwndText,0)

End Sub