〜 ネットワーク 〜
デフォルトホームページを取得 (要ADVAPI32.DLL)

MozillaのFireFoxや、アップル社のSafari等、数多くのウェブブラウザが存在し、
また、当Tips公開時点では未発表であるWindows7においては、
「独占禁止法(反トラスト法)違反である」として未搭載の予定になっているので需要があるかわかりませんが、
レジストリに格納されるインターネットエクスプローラのスタートページを取得します。
取得元は「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main」内の「Start Page」ですので、
レジストリ情報取得モジュールを使用して下記のように取得してみましょう。
	

gethkey キー文字列
キー文字列 定義済キー文字列を指定するとメインキーの定義値を返し、
以下の数値文字列を指定すれば定義済キー文字列を返す。
"0"HKEY_CLASSES_ROOT
"1"HKEY_CURRENT_USER
"2"HKEY_LOCAL_MACHINE
"3"HKEY_USERS
"4"HKEY_PERFORMANCE_DATA
"5"HKEY_CURRENT_CONFIG
"6"HKEY_DYN_DATA

regopenkey 受取変数, キー文字列, アクセスマスク
受取変数開く対象のキーハンドル受取先変数を指定する。
尚、オープン成功なら0、失敗ならエラーコードがstatに代入される。
キー文字列オープンするキーのパス(メインキー+サブキー)を指定する。
アクセスマスク以下に示すキーのセキュリティ権を指定する。
0x0001サブキーデータの問い合わせを許可
0x0002サブキーデータの問い合わせを許可
0x0004サブキーの作成を許可
0x0008サブキーの列挙を許可
0x0010変更の通知を許可
0x0020シンボリックリンクの作成を許可
0x00020006読込系の処理を許可
0x00020019書込系の処理を許可
0x000F003F全ての処理を許可

reggetvalue 受取変数, 項目名, キーハンドル, タイプフラグ
受取変数データまたはデータの型を受け取る変数を指定する。
尚、取得成功すれば0、失敗すればエラーコードがstatに代入される。
項目名値の名前文字列を指定する。
キーハンドルregopenkey命令で取得した対象キーのハンドルを指定する。
タイプフラグデータは0を、データ型を取得する場合は1を指定する。
尚、取得されるデータ型は次のいずれかの数値である。
0定義されていない型
1NULLで終わる文字列
2展開前の環境変数への参照が入った文字列
3バイナリーデータ
432ビット数値(リトルエンディアン形式)
532ビット数値(ビッグエンディアン形式)
6Unicodeシンボリックリンク
7NULLで終わる複数行文字列
8デバイスドライバのリソースリスト
1164ビット数値(リトルエンディアン形式)

regclose キーハンドル
キーハンドル使い終わって解放する、または設定し終えて更新するキーハンドルを指定する。

 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
	ll_libload advapi, "advapi32.dll"
	ll_getproc RegOpenKeyEx, "RegOpenKeyExA", advapi
	ll_getproc RegQueryValueEx, "RegQueryValueExA", advapi
	ll_getproc RegCloseKey, "RegCloseKey", advapi

#module
#deffunc gethkey str
	mref string, 32
	sdim s, 22, 7
	mref stt, 64
	mref rstr, 65
	s.0 = "HKEY_CLASSES_ROOT", "HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE", "HKEY_USERS"
	s.4 = "HKEY_PERFORMANCE_DATA", "HKEY_CURRENT_CONFIG", "HKEY_DYN_DATA"
	strmid rstr, string, 0, 1
	if rstr ! "H" {
		i = 0 + rstr
		rstr = s.i
		return
	}
	instr i, string, "\\"
	if i ! -1 : strmid rstr, string, 0, i : else : rstr = string
	stt = 0
	repeat 7
		if s.cnt = rstr {
			stt = 0x80000000 + cnt
			instr i.0, string, "\\"
			strlen i.1, string
			strmid rstr, string, i + 1, i.1 - i.0 - 1
			break
		}
	loop
	return

#deffunc regopenkey val, str, int
	mref hkey, 16 : mref path, 33 : mref sa, 3
	mref stt, 64
	gethkey path
	if stat = 0 : return
	path = refstr
	prm = stat, 0, 0, (sa = 0) * 0x000F003F + sa
	ll_getptr path : ll_ret prm.1
	ll_getptr hkey : ll_ret prm.4
	ll_callfunc prm, 5, RegOpenKeyEx@
	ll_ret prm : stt = prm
	return

#deffunc reggetvalue val, str ,int, int
	mref data, 24 : mref name, 33 : mref hkey, 2 : mref type, 3
	mref stt, 64
	prm = hkey
	i.1 = 256
	ll_getptr name : ll_ret prm.1
	ll_getptr i    : ll_ret prm.3
	ll_getptr data : ll_ret prm.4
	ll_getptr i.1  : ll_ret prm.5
	ll_callfunc prm, 6, RegQueryValueEx@
	ll_ret prm : stt = prm
	if i >= 4 & (i <= 6) | (i = 11) | (type ! 0) : mref data, 16
	if type : data = i
	return

#deffunc regclose int
	mref hkey, 0
	ll_callfunc hkey, 1, RegCloseKey@
	return
#global

	dat = "Error"
	value = "Start Page"
	gethkey "1" // HKEY_CURRENT_USER
	path = refstr + "\\SOFTWARE\\Microsoft\\Internet Explorer\\Main"
	regopenkey key, path
	if stat = 0 {
		reggetvalue dat, value, key
		regclose key
	}
	mes "IEのスタートページ「" + dat + "」"
	stop

定義済情報 = gethkey(キー文字列)
定義済情報定義済情報の受取先を指定する。
キー文字列 定義済キー文字列を指定するとメインキーの定義値を返し、
以下の数値文字列を指定すれば定義済キー文字列を返す。
"0"HKEY_CLASSES_ROOT
"1"HKEY_CURRENT_USER
"2"HKEY_LOCAL_MACHINE
"3"HKEY_USERS
"4"HKEY_PERFORMANCE_DATA
"5"HKEY_CURRENT_CONFIG
"6"HKEY_DYN_DATA

エラーコード = regopenkey(受取変数, キー文字列, アクセスマスク)
エラーコードオープン成功(=0)したか失敗(=エラーコード)したかの状態受取先を指定する。
受取変数開く対象のキーハンドル受取先変数を指定する。
キー文字列オープンするキーのパス(メインキー+サブキー)を指定する。
アクセスマスク以下に示すキーのセキュリティ権を指定する。
0x0001サブキーデータの問い合わせを許可
0x0002サブキーデータの問い合わせを許可
0x0004サブキーの作成を許可
0x0008サブキーの列挙を許可
0x0010変更の通知を許可
0x0020シンボリックリンクの作成を許可
0x00020006読込系の処理を許可
0x00020019書込系の処理を許可
0x000F003F全ての処理を許可

エラーコード = reggetvalue(受取変数, 項目名, キーハンドル, タイプフラグ)
エラーコード取得成功(=0)したか失敗(=エラーコード)したかの状態受取先を指定する。
受取変数データまたはデータの型を受け取る変数を指定する。
項目名値の名前文字列を指定する。
キーハンドルregopenkey命令で取得した対象キーのハンドルを指定する。
タイプフラグデータは0を、データ型を取得する場合は1を指定する。
尚、取得されるデータ型は次のいずれかの数値である。
0定義されていない型
1NULLで終わる文字列
2展開前の環境変数への参照が入った文字列
3バイナリーデータ
432ビット数値(リトルエンディアン形式)
532ビット数値(ビッグエンディアン形式)
6Unicodeシンボリックリンク
7NULLで終わる複数行文字列
8デバイスドライバのリソースリスト
1164ビット数値(リトルエンディアン形式)

regclose キーハンドル
キーハンドル使い終わって解放する、または設定し終えて更新するキーハンドルを指定する。

 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
33
34
35
36
37
38
39
#uselib "advapi32.dll"
#cfunc global RegOpenKeyEx "RegOpenKeyExA" int, sptr, int, int, var
#cfunc global RegQueryValueEx "RegQueryValueExA" int, sptr, int, var, var, var
#func  global regclose "RegCloseKey" int

#module
#defcfunc gethkey str string, local i, local s
	mref rstr, 65
	s.0 = "HKEY_CLASSES_ROOT", "HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE", "HKEY_USERS"
	s.4 = "HKEY_PERFORMANCE_DATA", "HKEY_CURRENT_CONFIG", "HKEY_DYN_DATA"
	rstr = string
	if strmid(rstr, 0, 1) ! "H" : return s(int(rstr))
	if instr(rstr, , "\\") ! -1 : rstr = strmid(rstr, 0, instr(rstr, , "\\"))
	foreach s
		if s.cnt = rstr {
			i = 0x80000000 + cnt
			rstr = string
			rstr = strmid(rstr, instr(rstr, , "\\") + 1, strlen(rstr) - instr(rstr, , "\\") - 1)
			break
		}
	loop
	return i

#defcfunc regopenkey var hkey, var path, int sa, local s
	return RegOpenKeyEx(int(gethkey(path)), refstr, , (sa = 0) * 0x000F003F + sa, hkey)

#defcfunc reggetvalue var data, int hkey, str name, int type, local i
	i = 256
	i.1 = RegQueryValueEx(hkey, name, , i.2, data, i)
	if type : data = i.2
	return i.1
#global

	sdim dat, 16
	value = "Start Page"
	path = gethkey("1") + "\\SOFTWARE\\Microsoft\\Internet Explorer\\Main"
	if regopenkey(key, path) ! 0 | reggetvalue(dat, key, value) ! 0 : dat = "Error"
	regclose key
	mes "IEのスタートページ「" + dat + "」"