〜 ウィンドウ 〜
タイトルバーのテキストを取得 (要USER32.DLL)

キャプションバーテキストを設定する命令はありますが、取得をする命令は用意されてません。
まぁ…設定はプログラマ自身が設定するものなので、
設定前に変数に格納するようにしておけば現在の設定テキストはいつでも知ることが出来るわけですが。
しかし、自分で作ったプログラムではないウィンドウはバーテキストを保持できないわけですし、
自作プログラムであっても、外部アプリケーションの場合は取得することが困難です。
そこで、API関数を使って予め保持しておかなくても、バーテキストを取得できるサンプルを紹介します。
ココでは、現在動かしている自分自身のHSPウィンドウIDにより指定するやり方と、
現在のアクティブウィンドウ…つまり、自分自身ではない可能性のあるウィンドウを指定するやり方の
いずれかを指定できるようにした命令または関数にしています。
使い方は下記のサンプルをしてください。
	

getactivehwnd
[パラメータなし]現在のアクティブウィンドウのハンドルを取得するだけであるためパラメータは必要ない。
尚、取得結果はstatに代入する。

gettitle ウィンドウID
ウィンドウIDタイトル文字列取得元のウィンドウIDを指定する。
−1を指定するとアクティブウィンドウ(HSP以外も可能)が対象となる。
尚、refstrに取得テキスト、statに取得テキストのサイズが代入される。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	ll_libload user, "user32.dll"
	ll_getproc GetWindowText, "GetWindowTextA", user
	ll_getproc GetForegroundWindow, "GetForegroundWindow", user

#module
#deffunc getactivehwnd val
	mref h, 16
	ll_callfnv GetForegroundWindow@
	ll_ret h
	return

#deffunc gettitle int
	mref id, 0
	mref stt, 64
	mref rstr, 65
	mref bmscr, 67
	sdim s, 1024
	if id = -1 { getactivehwnd i.1 } else { i = id + 96 : i.1 = bmscr.i }
	prm = i.1, 0, 0
	ll_getptr rstr : ll_ret prm.1
	ll_getptr stt  : ll_ret prm.2
	ll_callfunc prm, 3, GetWindowText@
	ll_ret i : stt = i
	return
#global

	mes "3秒後、アクティブなウィンドウのタイトルテキストを取得します"
	wait 300
	gettitle -1
	mes "取得テキスト「" + refstr + "」"
	mes "バイト数「" + stat + "」"
	stop

タイトルバーテキスト = gettitle(ウィンドウID)
タイトルバーテキストタイトル文字列の格納先を指定する。
尚、statに取得テキストのサイズが代入される。
ウィンドウIDタイトル文字列取得元のウィンドウIDを指定する。
−1を指定するとアクティブウィンドウ(HSP以外も可能)が対象となる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#uselib "user32.dll"
#func	global GetWindowText "GetWindowTextA" int, var, var
#cfunc	global GetForegroundWindow "GetForegroundWindow"

#module
#defcfunc gettitle int id, local i, local s
	mref stt, 64
	sdim s, 1024
	i = ginfo_sel
	if id = -1 { i.1 = GetForegroundWindow() } else { if i.0 ! id { gsel id } : i.1 = hwnd }
	GetWindowText i.1, s, stt
	if id ! -1 & i.0 ! id : gsel i
	return s
#global

	mes "3秒後、アクティブなウィンドウのタイトルテキストを取得します"
	wait 300
	mes "取得テキスト「" + gettitle(-1) + "」"
	mes "バイト数「" + stat + "」"