EmEditorみんなでまとめサイト

workspace復元マクロ

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
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

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー