按键精灵脚本制作获取窗口信息(高级篇)

General]
Description=获取窗口信息
BeginHotkey=121
BeginHotkeyMod=0
PauseHotkey=0
PauseHotkeyMod=0
StopHotkey=123
StopHotkeyMod=0
RunOnce=1
EnableWindow=
Enable=0
[Repeat]
Type=0
Number=1
[CallBack]
OnSetup=
[Comment]
Content=.
【功能说明】.
  该脚本查找当前窗口的子窗体,包括按钮、标签、图像、列表框等,并将这些子窗体的窗口句柄、类名、坐标信息,保存到c盘根目录下的log.txt文件中。.
.
【详细说明】.
  该脚本主要举例说明以下功能:.
  1、文本文件的读写操作。.
  2、Window插件的调用演示。.
  3、如何从一个长字符串中,按特定的格式分解出所需要的数据——Split函数使用.
  4、数组元素的使用方法。.
5、循环语句的使用。.
  4、如何调用软件(RunApp的使用)。.

【制作日期】.
2008年5月.
.
[Script]
//先定义变量是一个好习惯
dim handle,handle1, s,s1,s2,s3, MyArray,parentH, fileHandle
//=================== 主程序 ======================
//打开一个文件,该文件如果不存在就创建一个
Plugin fileHandle = File.OpenFile(”c:\log.txt”)
//调用子程序
Gosub 查找窗体
//关闭上面打开的文件
Plugin File.CloseFile(filehandle)
//用笔记本软件打开刚才保存的文件
VBSCall RunApp(”Notepad c:\log.txt”)
Rem 结束
//弹出对话框,显示程序结束
VBSCall MessageBox(”程序终止运行”)
//程序结束
EndScript
//================== 子程序 ========================
Sub 查找窗体
    //获取当前窗口的句柄
    Plugin parentH = Window.Foreground()
    //如果当前无窗口,则结束程序
    If parentH = 0
        VBSCall MessageBox(”没有找到父窗口,程序结束”)
        Goto 结束
    EndIf
    //变量初始化
    handle=1
    handle1=0
    //一直循环查找到子窗口,直到找不到为止
    While handle<>0
        //查找当前窗口的子窗口
        Plugin handle = Window.FindEx(parentH, handle1,0,0)
        //如果找到子窗口
        If handle <> 0
            //获取子窗口的信息, GetClientRect 返回的信息是一个字符串, 格式如:123|356|200|400
            Plugin s = Window.GetClientRect(handle)
            //按|对上面的字符串进行分割, 并保存到数组里面
            //Split进行分割后, MyArray数组中的数组如下:
            // MyArray(0) = 123  <—窗口的左边坐标
            // MyArray(1) = 356  <—窗口的上边坐标
            // MyArray(2) = 200  <—窗口的宽度
            // MyArray(3) = 400  <—窗口的高度
            //注意: 数组的第一个元素, 读取的时候是 MyArray(0), 而不是  MyArray(0)
            //即数组元素的下标是从 0 开始, 而不是从 1 开始的
            MyArray = Split(s, “|”, -1, 1)
            //用 & 连字符, 将各数组连接起来
            s = “坐标(x,y):” & MyArray(0) & “,” & MyArray(1) & ” 宽度,高度:” & MyArray(2) & “,” & MyArray(3)
            //获取窗口的类名称
            Plugin s1 = Window.GetClass(handle)
            s1 = “类名: ” & s1
            //获取窗口的标题
            Plugin s2 = Window.GetText(handle)
            s2 = “,标题:” & s2
            s3 = ” 句柄: ” & CStr(handle)
            //如果文件打开成功的话, 则把上面的各种信息写到文件中,即c:\log.txt
            If fileHandle <> -1
                Plugin File.WriteLine(fileHandle, s1 & s2 & s & s3)
            EndIf
        EndIf
        //更新handle1的值,以保证循环继续
        handle1 = handle
    EndWhile
Return 查找窗体

Leave a Reply