Item = 履歴の編集
Information = 製造元のファイルのコピー元のフォルダの履歴を編集します。
Icon = rnsf7.exe,-229
Category = シェル関連
Help = dynamic
Url = http://www011.upp.so-net.ne.jp/SinwaHamada/
Author = Sinwa Hamada/矢吹拓也
Try = off
MustDefVar = on

%%

// -----------------------------------------------------------------------
// いじくるつくーる (Rnsf ver.7)「履歴の編集」 ver.1.11
//                            Copyright(C) 2008,2011 Sinwa Hamada/矢吹拓也
// -----------------------------------------------------------------------

// ===========================================================
// [レジストリ読み込み]
// ===========================================================
multitext(2, dhelp$("フォルダ名やファイル名の履歴のフルパスを改行区切りで指定します。\n途中で空行を入れたり、重複したフォルダ名・ファイル名を入れてはいけません。"))

text(dhelps$("●「ペイント」の「最近使ったファイル」(&P)："))
CtrlID$ = "PaintRecent"
File4ListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Paint\Recent File List"
GOSUB :CreateFile4Edit
dhelp$("「ペイント」の「最近使ったファイル」の編集を行います。4つまで指定できます。")

text(dhelps$("●「ワードパッド」の「最近使ったファイル」(&W)："))
CtrlID$ = "WordPadRecent"
File4ListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Wordpad\Recent File List"
GOSUB :CreateFile4Edit
dhelp$("「ワードパッド」の「最近使ったファイル」の編集を行います。4つまで指定できます。")

text(dhelps$("●製造元のファイルのコピー元のフォルダの履歴(&I)："))
if (isNT) { // NT系ではMULTISZ方式
	MultiEdit("Installation Sources", 15, "",
	          @"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup",
	          "Installation Sources")
}
else { // 9x系ではMRUList方式
	MRUListKey$ = @"HKEY_CURRENT_USER\InstallLocationsMRU"
	CtrlID$ = "Installation Sources"
	GOSUB :CreateMRUEdit
}
dhelp$("ハードウェアのドライバ製造元のファイルのコピー元のフォルダの履歴を編集します。")
dhelp$("デバイスマネージャでハードウェアのドライバを検索しようとするときのフォルダの履歴です。")
dhelp$("Windows NT 4.0では「ドライバのインストール」となっています。")
if (!isNT) {
	text(dhelp$("フォルダは5個まで指定できます。"))
}

if (isNT && winver >= 500) {
	text(dhelps$("●ネットワークドライブのフォルダの履歴(&N)："))
	MRUListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU"
	CtrlID$ = "Map Network Drive MRU"
	GOSUB :CreateMRUEdit
	dhelp$("「エクスプローラ」の「ツール」メニューの「ネットワークドライブ割り当て」で表示されるフォルダの履歴を編集します。")
	dhelp$("フォルダは26個まで指定できます。")
}

dhelp$("\n")
dhelpbuttons$()
exit

// -----------------------------------------------------------
// レジストリ読み出し用共通関数
// -----------------------------------------------------------
// CreateMRUEditサブルーチン
// 引数　MRUListKey$ … MRUListの形式になっているエントリ群が格納されたキーを指定
// 　　　CtrlID$     … 作成される MultiEdit のコントロールID
:CreateMRUEdit
// "MRUList" は値のリストになっているので、これを取得して１文字ずつ解析する
MRUList$ = RegReadSz$(MRUListKey$, "MRUList", "")
n = strlen(MRUList$)
mrus$ = ""
for(0, i<n) {
	// MRUList内の文字を１文字ずつ読み、その文字を名前とするエントリを順に取得する
	mru$ = RegReadSz$(MRUListKey$, substr$(MRUList$, i, 1), "")
	if (mru$ != "") {
		// 空行でなければ追加
		mrus$ += mru$
		mrus$ += "\r\n"
	}
}
// MultiEditコントロールの作成
MultiEdit(CtrlID$, 15, mrus$)
return
// -----------------------------------------------------------
// CreateFile4Editサブルーチン
// 引数　File4ListKey$ … File1-4の形式になっているエントリ群が格納されたキーを指定
// 　　　CtrlID$     … 作成される MultiEdit のコントロールID
:CreateFile4Edit
// "File1"〜"File4"に履歴のファイル名が格納されているので、１つずつ読み出して改行を挿入していく
mrus$ = ""
for(1, i<=4) {
	mru1$ = RegReadSz$(File4ListKey$, "File"+i, "")
	if (mru1$ != "") { // 空行でなければ追加
		mrus$ += mru1$
		mrus$ += "\r\n"
	}
	else { // 空行を見つけたら終了
		break
	}
}
// MultiEditコントロールの作成
MultiEdit(CtrlID$, 4, mrus$)
return

// ===========================================================
// [レジストリ書き込み]
// ===========================================================
:ok

// ●「ペイント」の「最近使ったファイル」
CtrlID$ = "PaintRecent"
if (1 == isChanged(CtrlID$)) {
	if ((CheckMultiEdit(CtrlID$) & 3) != 0) {
		Warning("『「ペイント」の「最近使ったファイル」』の空行または重複を取り除いてください。", "空行・重複の確認")
		abort
	}
	File4ListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Paint\Recent File List"
	GOSUB :SaveFile4Edit
}

// ●「ワードパッド」の「最近使ったファイル」
CtrlID$ = "WordPadRecent"
if (1 == isChanged(CtrlID$)) {
	if ((CheckMultiEdit(CtrlID$) & 3) != 0) {
		Warning("『「ワードパッド」の「最近使ったファイル」』の空行または重複を取り除いてください。", "空行・重複の確認")
		abort
	}
	File4ListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Wordpad\Recent File List"
	GOSUB :SaveFile4Edit
}

// ●製造元のファイルのコピー元のフォルダの履歴
CtrlID$ = "Installation Sources"
if (1 == isChanged(CtrlID$)) {
	if ((CheckMultiEdit(CtrlID$) & 3) != 0) {
		Warning("『製造元のファイルのコピー元のフォルダの履歴』の空行または重複を取り除いてください。", "空行・重複の確認")
		abort
	}
	
	if (!isNT) { // 9xではMRUList方式
		MRUListKey$ = @"HKEY_CURRENT_USER\InstallLocationsMRU"
		MaxItem = 5
		GOSUB :SaveMRUEdit
	}
}

if (isNT && winver >= 500) {
	// ●ネットワークドライブのフォルダの履歴編集
	MRUListKey$ = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU"
	CtrlID$ = "Map Network Drive MRU"
	MaxItem = 26
	GOSUB :SaveMRUEdit
}

exit


// -----------------------------------------------------------
// レジストリ書き込み用共通関数
// -----------------------------------------------------------
// SaveMRUEditサブルーチン
// 引数　MRUListKey$ … MRUListの形式になっているエントリ群が格納されるキーを指定
// 　　　CtrlID$     … 参照される MultiEdit のコントロールID(26行まで)
// 　　　MaxItem     … 項目数の最大
:SaveMRUEdit

// "MRUList" は値のリストになっているので、これを取得して１文字ずつ解析する
n = GetMultiEditLineCount(CtrlID$)

// "MRUList"の値を作成開始
MRUList$ = ""

// MaxItem項目以上になる場合は、MaxItem行に絞る
if (n > MaxItem) {
	n = MaxItem
}

for(0, i<n) {
	// 複数行編集ボックスから1行ずつ取得し、レジストリへ書き込んでいく
	mru$ = GetMultiEditLine$(CtrlID$, i)

	// a〜zの順に書き込む（元の状態とは一致しなくなるかも知れないが、一覧の順番は変わらないはず）
	mru_a$ = AsciiCode$(GetAsciiCode("a", 0) + i)
	MRUList$ += mru_a$

	RegWriteSz(MRUListKey$, mru_a$, mru$)
}
// 最後に順番となる "MRUList" を書き込み
RegWriteSz(MRUListKey$, "MRUList", MRUList$)

// 不要になったエントリを削除
for(n, i<MaxItem) {
	mru_a$ = AsciiCode$(GetAsciiCode("a", 0) + i)
	RegDeleteValue(MRUListKey$, mru_a$)
}
return

// -----------------------------------------------------------
// SaveFile4Editサブルーチン
// 引数　File4ListKey$ … File1-4の形式になっているエントリ群が格納されたキーを指定
// 　　　CtrlID$     … 作成される MultiEdit のコントロールID
:SaveFile4Edit
// 編集ボックスの先頭4行を、"File1"〜"File4"に書き出す
mrus$ = ""
for(1, i<=4) {
	mru1$ = GetMultiEditLine$(CtrlID$, i-1)
	if (mru1$ != "") { // 空行でなければ書き込み
		RegWriteSz(File4ListKey$, "File"+i, mru1$)
	}
	else { // 空行を見つけたら終了
		break
	}
}

// 不要になったエントリを削除
for(i, i<=4) {
	RegDeleteValue(File4ListKey$, "File"+i)
}
return
