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