〜 スクリプト 〜
現在の設定フォント情報を取得 (要GDI32.DLL)

フォントを設定する命令は用意されていますが、設定したフォント情報を取得する命令は用意されていません。
下記サンプルは、BMSCR構造体要素38のフォントハンドルを元にWinAPIGetObjectをコールし、
取得したLOGFONT構造体から必要な情報のみを返しています。
フォント名、サイズ、スタイル(太字、斜体、下線、打消線)の以外の情報は取得していません。
その他の情報を取得したい場合は、APIや構造体を元にサーチしてみてください。
尚、文字の太さは0が細字で、1が太字といった2段階の区別ではなく、
0〜1000、主に下記の定数値のいずれかが設定されるようになっています。
FW_DONTCARE0デフォルトの太さ
FW_THIN100かなり細い
FW_EXTRALIGHT
FW_ULTRALIGHT
200細い
FW_LIGHT300やや細め
FW_NORMAL
FW_REGULAR
400通常の太さ
FW_MEDIUM500中間的な太さ
FW_DEMIBOLD
FW_SEMIBOLD
600やや太め
FW_BOLD700太い
FW_EXTRABOLD
FW_ULTRABOLD
800かなり太い
FW_BLACK
FW_HEAVY
900超極太
複数段階があるとはいえ、実際の外観はフォントに依存しており、全てが指定できるわけではないようです。

finfo タイプ
タイプ下記の取得したいフォント情報タイプを指定する。
尚、取得結果はフォント名はrefstrに、それ以外はstatに代入される。

0: フォント名
1: フォントサイズ
2: 太文字指定の有無(0:指定なし 1: 太文字指定)
3: 斜体指定の有無(0:指定なし 1:斜体指定)
4: 下線指定の有無(0:指定なし 1:下線指定)
5: 打消し線指定の有無(0:指定なし 1:打消し線指定)

 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
	ll_libload gdi32, "gdi32.dll"
	ll_getproc GetObjectA, "GetObjectA", gdi32

#module
#deffunc finfo int
	mref type, 0
	mref bmscr, 67
	mref stt, 64 : mref rstr, 65
	dim logfont, 15						// LOGFONT構造体(60byte = 4byte * 15)
	ll_getptr logfont : ll_ret h
	prm = bmscr.38, 60, h					// フォントハンドル, 60byte, LOGFONT
	ll_callfunc prm, 3, GetObjectA@
	if type = 0 : ll_peek rstr, h + 28
	if type = 1 : stt = logfont < 0 * -logfont + (logfont > -1 * logfont)	// 負数を直す
	if type = 2 : stt = logfont.4 >= 600			// FW_SEMIBOLD(=600) 以上は太字とする
	if type = 3 : stt = logfont.5 >> 0 & 0xFF		// 20byte = lfItalic
	if type = 4 : stt = logfont.5 >> 8 & 0xFF		// 21byte = lfUnderline
	if type = 5 : stt = logfont.5 >> 16 & 0xFF		// 22byte = lfStrikeOut
	return
#global

	sdim infotype, 20, 6
	infotype = "タイプフェイス名", "サイズ", "太文字", "イタリック体", "下線", "打ち消し線"
	font "MS 明朝", 20, 5 // MS明朝 20pt 太文字+下線
	repeat 6
		pos  10, cnt * 30 + 10 : mes infotype.cnt
		pos 300, cnt * 30 + 10
		finfo cnt
		if cnt : mes stat : else : mes refstr
	loop
	stop

フォント情報 = finfo(タイプ)
フォント情報取得したフォント情報の受取先を指定する。
尚、フォント名は文字列情報、それ以外は0or1の数値情報。
タイプ下記の取得したいフォント情報タイプを指定する。

0: フォント名
1: フォントサイズ
2: 太文字指定の有無(0:指定なし 1: 太文字指定)
3: 斜体指定の有無(0:指定なし 1:斜体指定)
4: 下線指定の有無(0:指定なし 1:下線指定)
5: 打消し線指定の有無(0:指定なし 1:打消し線指定)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#uselib "gdi32.dll"
#func  global GetObject "GetObjectA" sptr, int, var

#module
#defcfunc finfo int type, local bmscr, local logfont, local lfFaceName
	mref bmscr, 67
	dim logfont, 15					// LOGFONT構造体(60byte = 4byte * 15)
	GetObject bmscr.38, 60, logfont			// フォントハンドル(hFont)で情報取得
	if type = 1 : return abs(logfont)		// 負数を直す
	if type = 2 : return logfont.4 >= 600		// FW_SEMIBOLD(=600) 以上は太字とする
	if type = 3 : return logfont.5 >> 0 & 0xFF	// 20byte = lfItalic
	if type = 4 : return logfont.5 >> 8 & 0xFF	// 21byte = lfUnderline
	if type = 5 : return logfont.5 >> 16 & 0xFF	// 22byte = lfStrikeOut
	sdim lfFaceName, 32
	dupptr lfFaceName, varptr(logfont) + 28, 32, 2	// 28byte〜59byte = lfFaceName
	return lfFaceName
#global

	infotype = "タイプフェイス名", "サイズ", "太文字", "イタリック体", "下線", "打ち消し線"
	font msmincho, 20, 5 // MS明朝 20pt 太文字+下線
	foreach infotype
		pos  10, cnt * 30 + 10 : mes infotype.cnt
		pos 300, cnt * 30 + 10 : mes finfo(cnt)
	loop