UWSC 指定ウィンドウ上の各コントロールのタイトルとクラスを列挙

指定したウィンドウの子要素を列挙します
「”タイトル”, “クラス名” 」 で表示してます
インデントは階層構造を示しています
これを元にgetid()なりgetctlhnd()なり

2012/05/28
なおした!27行目とか!

const GW_CHILD     = 5
const GW_HWNDNEXT  = 2
def_dll GetWindow(hwnd, dword):hwnd:user32

id = getIdFromList()
if id > -1 then enumChild(id)

pid = getid(GET_LOGPRINT_WIN)
while status(pid, ST_VISIBLE)
	sleep(0.1)
wend

procedure enumChild(id, indent = 0)
	printControl(id, indent)
	hChild = GetWindow(idtohnd(id), GW_CHILD)
	if hChild then
		enumChild(hndtoid(hChild), indent + 1)
		hNext = GetWindow(hChild, GW_HWNDNEXT)
		while hNext
			enumChild(hndtoid(hNext), indent + 1)
			hNext = GetWindow(hNext, GW_HWNDNEXT)
		wend
	endif
fend

procedure printControl(id, indent = 0)
	indent = format(" ", indent * 4)
	print indent + "<#DBL>" + status(id, ST_TITLE) + "<#DBL>, <#DBL>" + status(id, ST_CLASS) + "<#DBL>"
fend

function getIdFromList()
	hashtbl hashID
	hashcnt = 0
	for i = 0 to getallwin() - 1
		id = ALL_WIN_ID[i]
		ifb status(id, ST_VISIBLE)
			eachtitle =  status(id,ST_TITLE)
			if eachtitle = "" then eachtitle = "(タイトルなし)"
			if lengthb(eachtitle) > 38 then eachtitle = copyb(eachtitle, 1, 38) + "…"
			hashID[id] = eachtitle
		endif
	next
	
	n = slctbox(SLCT_NUM or SLCT_LST, 0, "階層構造を調べたいウィンドウを指定", hashID)
	if n = "" or n = -1 then
		result = -1
	else
		if pos("<#tab>", n) then token("<#tab>", n)
		result = hashID[n, HASH_KEY]
	endif
fend
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中