よく使うフォルダ

提供: MeryWiki
2012年11月27日 (火) 08:52時点における手石 (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

quickaccess.js

1.動作 ・ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラーで開く。 2.使い方 ・マクロを実行すると“My Macros”フォルダに“quickaccess.txt”が作成されます。  この場所とファイル名は、“file_path”と“file_name”で指定しています。 ・“quickaccess.txt”に、フォルダパスとポップアップメニューに表示する内容とを“>>”で区切り、1件1行で書いてください。 ・フォルダパスは絶対パスで、“\”で終わっている必要があります。 ・ポップアップメニューに表示する内容の部分がないときは、フォルダパスを表示します。 ・単純な判断をしているので、複数の“>>”があると最後の部分のみが表示されます。つまり、例1と例2は同じ表示になります。 (例1)C:\Program Files (x86)\Mery\>>Meryのフォルダ (例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ

3.その他 ・Mery 2.0.11.3997、Windows7 x64 Home sp1 で作成しました。 // quickaccess.js // 20121121

var file_Name = "quickaccess.txt" var file_FullName = getPath(Editor.FullName) + "My Macros\\" + file_Name; var WshShell = new ActiveXObject("WScript.Shell"); var objFso = new ActiveXObject("Scripting.FileSystemObject");

// ファイルを読み取り専用で開く。 // 第2引数:オープンモード。 var FORREADING = 1; // 読み取り専用 var FORWRITING = 2; // 書き込み専用 var FORAPPENDING = 8; // 追加書き込み // 第3引数:ファイルが存在しなかった場合に“true”なら作成する。省略した場合は、“false”(作成しない)。 // 第4引数:開くファイルの形式。 var TRISTATE_TRUE = -1; // Unicode var TRISTATE_FALSE = 0; // ASCII var TRISTATE_USEDEFAULT = -2; // システムデフォルト var objFile = objFso.OpenTextFile(file_FullName, FORREADING, true, TRISTATE_FALSE );

// 一行ずつ読み込んで配列に。 // 空のファイルに“objFile.Readall()”はエラー。 var folderAry = []; while (!objFile.AtEndOfStream){

   folderAry.push(objFile.ReadLine());

}

// 読み終わったファイルを閉じる。 objFile.Close();

var offset = 10; // 固定メニュー数の上限。 var reg = new RegExp("^[a-zA-Z]:\\\\(.*\\\\)*$"); // フォルダを表す正規表現のつもり。 var menu = CreatePopupMenu(); var submenu = CreatePopupMenu(); for (var i in folderAry){ // “>>”でフォルダパスと表示名に分離。 var item = folderAry[i].split(">>"); item_0 = item[0]; item_1 = ((item.length <= 1)||item[item.length-1] == "" )? item[0]: item[item.length-1]; if (reg.test(item_0)){ menu.Add(item_1, +i + offset, 0); } } menu.Add("-------", 0, meMenuSeparator) menu.Add("このドキュメントのフォルダ", 1, 0) menu.Add("ユーザーフォルダ", 2, 0) menu.Add("-------", 0, meMenuSeparator) menu.AddPopup("設定", submenu); submenu.Add("フォルダの追加", 3, 0); submenu.Add(file_Name + "を開く", 4, 0); var r = menu.Track(mePosMouse);

switch(r){ case 0: break; case 1: WshShell.Run('explorer "' + Document.path + '"'); break; case 2: var folder_user = WshShell.SpecialFolders("Desktop").replace("Desktop","") WshShell.Run('explorer "' + folder_user + '"'); break; case 3: path = (document.path == "")? getPath(Editor.FullName): document.path; var input = prompt("フォルダパス(>>表示名)を入力してください。", path + ">>" ) if (input != ""){ var objFile = objFso.OpenTextFile(file_FullName, FORAPPENDING, true, TRISTATE_FALSE ); objFile.WriteLine(input); objFile.close(); } break; case 4: if (!isOpened(file_Name)){ Editor.NewFile(); Editor.Documents.Item(editor.Documents.Count-1).Activate(); } Editor.OpenFile(file_FullName); break; default : if (r >= offset){WshShell.Run('explorer "' + folderAry[r-offset].split(">")[0] + '"');} }

// “filename”をエディタで開いていれば“true”。 function isOpened(filename){ var result = false; for (var i = Editor.Documents.Count-1; i>=0; i--){ result = (result || Editor.Documents.Item(i).Name == filename); } return result; }

// ファイルのパス部分を返す。 function getPath(file_FullPath, slashend){ // 念のためにファイルパス+ファイル名の形式になっているかを正規表現で確認する? // var reg = new RegExp("^[a-zA-Z]:\\\\(.*\\\\)*[^\\\\]+$"); // if (!reg.test(file_FullPath)){return "pattern error!"} if (arguments.length < 2){slashend = true} var ary = file_FullPath.split("\\"); // 最後の“\”以降の要素を除去する。 ary.splice(ary.length-1, 1); return (slashend)? ary.join("\\")+"\\": ary.join("\\"); }

objFile = null; objFso = null; WshShell = null;

スポンサーリンク