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


发布评论