workspace復元マクロ †
'workspaceレジストリmemo
'5byteの情報(中身はよくわからん)の後に固定長の2bitにファイル名の長さを格納する。
'ファイル名の後に固定長の2bitにファイルタイプ名の長さを格納する。
'24bitの領域(中身はよく分からん。)の後はファイル名の領域がくる。
'尚、文字列部分は全てUTF16LEとなる。
'[initial_data(40bit)]←最初のみ
'[path_length(2bit)][path(path_lengthの値)]
'[filetype_length(2bit)][filetype(filetype_lengthの値)]
'[configs(24bit)]
'このマクロの挙動
'なんちゃってワークスペースの復元機能を実現します。プラグインイベントをマクロと組み合わせるプラグインの不具合対策
'レジストリからworkspaceの値を読み出して、エンコードを行い各種ファイルを開いていきます。キャレットの位置とかモロモロはムシします。
'VB初めてだからかなりイモってるけど多分平気なハズ。
'好きな名前.vbeeにして保存して使ってください
'通常の復元機能を使う場合は「ワークスペースの復元」をつかってください。
const HKEY_CURRENT_USER = &H80000001
Set stdRegProv = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
dim array(1)
dim filelength
dim j
dim filepath
dim filetypelength
dim list()
dim a
dim flg
Dim arrBinClr
'設定を列挙する
configPath = "Software\EmSoft\EmEditor v3\Common\"
stdRegProv.GetBinaryValue HKEY_CURRENT_USER, configPath, "Workspace", strValue
z=0
redim preserve list(1)
'最初から5byte文すっとばす。
For i = 40 To UBound(strValue)
filepath = ""
filetype = ""
'ファイル名の取得
array(0) = strValue(i)
array(1) = strValue(i+1)
filelength = EncodeValue(array)
For x = 1 To filelength*2 Step 2
array(0) = strValue(i+x+3)
array(1) = strValue(i+x+3+1)
filepath = filepath & EncodeStr(array)
Next
i= i + x + 3'帳尻あわせ
'ファイルタイプ名の取得
array(0) = strValue(i)
array(1) = strValue(i+1)
filetypelength = EncodeValue(array)
redim preserve list(ubound(list)+2)
For y = 1 To filetypelength*2 Step 2
array(0) = strValue(i+y+3)
array(1) = strValue(i+y+3+1)
filetype = filetype & EncodeStr(array)
Next
i= i + y + 46'帳尻あわせ
'配列につっこんでいく。
list(z) = filepath
list(z+1) = filetype
z=z+2'帳尻あわせ
Next
redim preserve list(ubound(list)-2)'帳尻あわせ
'ワークスペース復帰処理
'editor.ExecuteCommandByID (4119)'全て閉じる←editorまで閉じられてもorz
'fileオープン
For m = LBound(list) To UBound(list) Step 2
editor.OpenFile list(m) ,0,eeOpenAllowNewWindow
document.ConfigName = list(m+1)
Next
document.close'帳尻あわせ
'Functionとか
Function EncodeValue(value)
a = Right("0" & Hex(value(0)),2)
b = Right("0" & Hex(value(1)),2)
c = "&H" & b & a
EncodeValue = Hexdec(Hex(c))
End Function
Function Hexdec(value)
Hexdec = CLng("&H" & value)
End Function
Function EncodeStr(array)
a = Right("0" & Hex(array(0)),2)
b = Right("0" & Hex(array(1)),2)
c = "&H" & b & a
EncodeStr = ChrW(c )
End Function
