AutoHotKey进阶---acc查看窗口所有对象的ID号

AutoHotKey进阶—acc查看窗口所有对象的信息(包括ID)

引言

要对窗口对象进行操作,首先得知道要操作的对象的ID号.才能用acc库建立节点,并访问.
发现直接使用
这边的大部分代码都不是个人写的,而是来自一个国外的大佬.(旧版本)

ahkspy 工具方法

请添加图片描述


参考(旧版本)

核心代码原作者(英文)

案例演示demo

这边以获取百度搜索的 内容输入框的 ID为例.

  1. 打开百度搜索界面

  2. 按一下 alt+f ,等待一下. 看到出现下面的提示,说明已经获取完成.
    在这里插入图片描述

  3. 随便找一个地方新建一个 text文本.然后直接粘贴.会看到类似以下的内容.前面的1.1序号就是ID号.
    在这里插入图片描述

  4. 找到我们的目标对象. 百度搜索输入框的ID号 .
    在这里插入图片描述

代码实现

  1. 获取对象的所有信息,并粘贴到文本中.

原作者是把信息用msgbox显示出来. 但是我发现网页中的信息量太大.用msgbox不能完全显示.因此把内容放到剪贴板,然后手动复制到text中查看.

;alt+f
!f::
{
ToolTip, 请稍等...
WinGet, hWnd, ID, A
Clipboard := JEE_AccGetTextAll(hWnd, "`r`n")
ToolTip, 已截取到信息请粘贴到编辑器中
Sleep, 1000
ToolTip, 
Return
}
  1. JEE_StrRept函数, 这是核心函数(来自国外大佬),采用acc库获取窗口下面的所有资料.

没有acc库的请看我另外一篇博客acc的配置

JEE_StrRept(vText, vNum)
{
	if (vNum <= 0)
		return
	return StrReplace(Format("{:" vNum "}", ""), " ", vText)
	;return StrReplace(Format("{:0" vNum "}", 0), 0, vText)
}

;==================================================

; ;e.g.
; q::
; WinGet, hWnd, ID, A
; MsgBox, % Clipboard := JEE_AccGetTextAll(hWnd, "`r`n")
; return

; ;e.g.
; q::
; ControlGet, hCtl, Hwnd,, Edit1, A
; MsgBox, % Clipboard := JEE_AccGetTextAll(hCtl, "`r`n")
; return

; ;e.g.
; q::
; ControlGetFocus, vCtlClassNN, A
; ControlGet, hCtl, Hwnd,, % vCtlClassNN, A
; MsgBox, % Clipboard := JEE_AccGetTextAll(hCtl, "`r`n")
; return

;vOpt: space-separated list
;vOpt: n#: e.g. n20 ;limit retrieve name to first 20 characters
;vOpt: v#: e.g. v20 ;limit retrieve value to first 20 characters

JEE_AccGetTextAll(hWnd:=0, vSep:="`n", vIndent:="`t", vOpt:="")
{
	vLimN := 20, vLimV := 20
	Loop, Parse, vOpt, % " "
	{
		vTemp := A_LoopField
		if (SubStr(vTemp, 1, 1) = "n")
			vLimN := SubStr(vTemp, 2)
		else if (SubStr(vTemp, 1, 1) = "v")
			vLimV := SubStr(vTemp, 2)
	}

	oMem := {}, oPos := {}
	;OBJID_WINDOW := 0x0
	oMem[1, 1] := Acc_ObjectFromWindow(hWnd, 0x0)
	oPos[1] := 1, vLevel := 1
	VarSetCapacity(vOutput, 1000000*2)

	Loop
	{
		if !vLevel
			break
		if !oMem[vLevel].HasKey(oPos[vLevel])
		{
			oMem.Delete(vLevel)
			oPos.Delete(vLevel)
			vLevelLast := vLevel, vLevel -= 1
			oPos[vLevel]++
			continue
		}
		oKey := oMem[vLevel, oPos[vLevel]]

		vName := "", vValue := ""
		if IsObject(oKey)
		{
			vRoleText := Acc_GetRoleText(oKey.accRole(0))
			try vName := oKey.accName(0)
			try vValue := oKey.accValue(0)
		}
		else
		{
			oParent := oMem[vLevel-1,oPos[vLevel-1]]
			vChildId := IsObject(oKey) ? 0 : oPos[vLevel]
			vRoleText := Acc_GetRoleText(oParent.accRole(vChildID))
			try vName := oParent.accName(vChildID)
			try vValue := oParent.accValue(vChildID)
		}
		if (StrLen(vName) > vLimN)
			vName := SubStr(vName, 1, vLimN) "..."
		if (StrLen(vValue) > vLimV)
			vValue := SubStr(vValue, 1, vLimV) "..."
		vName := RegExReplace(vName, "[`r`n]", " ")
		vValue := RegExReplace(vValue, "[`r`n]", " ")

		vAccPath := ""
		if IsObject(oKey)
		{
			Loop, % oPos.Length() - 1
				vAccPath .= (A_Index=1?"":".") oPos[A_Index+1]
		}
		else
		{
			Loop, % oPos.Length() - 2
				vAccPath .= (A_Index=1?"":".") oPos[A_Index+1]
			vAccPath .= " c" oPos[oPos.Length()]
		}
		vOutput .= vAccPath "`t" JEE_StrRept(vIndent, vLevel-1) vRoleText " [" vName "][" vValue "]" vSep

		oChildren := Acc_Children(oKey)
		if !oChildren.Length()
			oPos[vLevel]++
		else
		{
			vLevelLast := vLevel, vLevel += 1
			oMem[vLevel] := oChildren
			oPos[vLevel] := 1
		}
	}
	return SubStr(vOutput, 1, -StrLen(vSep))
}```
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spy4Win v0.20b =================================== Spy for Window(探测更多的窗口信息) ● 软件简介:   Spy4Win(Spy for Window)是一个类似MS Spy++的辅助工具,主要功能是探测和获取窗口的更多信息(窗口基本信息,窗口的样式描述以及动态改变窗口样式,识别控件来源, 窗口类的相关信息,关系窗口的获取(父窗口/子窗口等),窗口内容的读取,窗口消息截获,可视窗口截图等)。提供了多种方法查找窗口(拖拽鼠标/枚举窗口(EnumWindow)/查找窗口(FindWindow)/直接指定窗口句柄/用热键获取当前鼠标下窗口等);可以从可执行文件中提取窗体可重用单元并生成Delphi和C++Builder支持的单元文件;克隆其他程序中的窗体菜单或系统菜单并应用到Delphi和C++Builder中;IE页面分析功能包括读取IE页面元素,缩放页面,高亮页面中的关键字,提取所有链接/图片链接/Flash链接,运行JavaScript和VBScript脚本等;程序代码生成可直接生成查找窗口和读取/设置窗口样式的代码以及窗口样式描述的参考,目前支持C++/Delphi/VB;屏幕颜色拾取获取屏幕任何一点的颜色并可将其储存起来,一组支持6个颜色,还兼有放大镜功能;程管理包括当前程/模块/线程查看;软件界面可根据用户的爱好自定义主题色彩,新版本中提供了对插件的支持,可以通过编写Dll来扩充软件功能。 ● 程序制作:   by ccrun(老妖),用C++Builder 6.0编写,未使用第三方控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值