ll_libload advapi, "advapi32.dll"
ll_getproc RegOpenKeyEx, "RegOpenKeyExA", advapi
ll_getproc RegQueryValueEx, "RegQueryValueExA", advapi
ll_getproc RegSetValueEx, "RegSetValueExA", advapi
ll_getproc RegDeleteValue, "RegDeleteValueA", 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 regsetnum str, int, int, int
mref name, 32 : mref data, 1 : mref hkey, 2 : mref type, 3
mref stt, 64
if type = 3 {
s = "" + data
strlen i, s
} else {
if type = 11 : i = 8 : else : i = 4
}
prm = hkey, 0, 0, (type = 0) * 4 + type, 0, i
ll_getptr name : ll_ret prm.1
ll_getptr data : ll_ret prm.4
ll_callfunc prm, 6, RegSetValueEx@
ll_ret prm : stt = prm
return
#deffunc regdelvalue int, str
mref hkey, 0 : mref name, 33
mref stt, 64
prm = hkey
ll_getptr name : ll_ret prm.1
ll_callfunc prm, 2, RegDeleteValue@
ll_ret prm : stt = prm
return
#deffunc regclose int
mref hkey, 0
ll_callfunc hkey, 1, RegCloseKey@
return
#global
#define deffile "RegDefSet.bak" // バックアップファイル名
#define num 5 // 設定項目総数
onexit *exit
sdim value, 24, num
sdim path, 128
value = "ClearPageFileAtShutdown", "DisablePagingExecutive", "IoPageLockLimit", "NonPagedPoolSize", "SecondLevelDataCache"
dim dat, num
notesel bk
objsize 250, 25
gethkey "2"
path = refstr + "\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management"
regopenkey key, path
gosub *reload
exist deffile
if strsize = -1 : gosub *backup
stop
*backup
repeat num
if dat.cnt ! -1 : noteadd value.cnt + "=" + dat.cnt
loop
notesave deffile
dialog "元の設定を「" + deffile + "」に保存しました"
return
*init
exist deffile
if strsize = -1 {
dialog "バックアップファイルが見つかりません", 1
return
}
dialog "元の設定に戻しますか?", 2
if stat = 7 : return
noteload deffile
repeat num
instr i, bk, value.cnt
strlen i.1, value.cnt
if i = -1 {
regdelvalue key, value.cnt // 元々存在しなかった場合は削除
} else {
getstr tmp, bk, i + i.1 + 1, '\n'
regsetnum value.cnt, 0 + tmp, key // 元の値に書換
}
loop
notfound = 0
gosub *reload
stop
*clear
gosub *reload
stop
*reload
redraw 0
color 255, 255, 255 : boxf : color
clrobj
pos 10, 10 : mes "対象キー(参考表示)"
pos 180, 10 : input path, 450, 20
if key {
pos 10, 60 : button "設定初期化(バックアップ読込)", *init
pos 10, 90 : chkbox "項目が存在しない場合は作成", notfound
pos 10, 120 : button "設定クリア(レジストリ再読込)", *clear
pos 10, 150 : button "設定更新", *set
repeat num
reggetvalue tmp, value.cnt, key
pos 10, cnt * 30 + 180 : mes value.cnt
if stat = 0 | notfound = 1 {
if stat ! 0 : dat.cnt = 0 : else : dat.cnt = 0 + tmp
pos 210, cnt * 30 + 180 : input dat.cnt, 50, 20
} else {
pos 210, cnt * 30 + 180 : mes "存在しません"
dat.cnt = -1
}
loop
pos 10, 350 : mes "※存在しない項目は作成チェックを付けて設定クリアをしてください"
} else {
pos 10, 60 : mes "キー自体が存在しない場合は更新できません"
}
redraw 1
return
*set
if key {
dialog "上記の設定に変更します。\nよろしいですか?", 2
if stat = 6 {
repeat num
reggetvalue tmp, value.cnt, key
if stat = 0 | notfound = 1 {
regsetnum value.cnt, dat.cnt, key // 更新
}
loop
}
}
stop
*exit
if key : regclose key
|