よく使うフォルダ
myfolders.js
1.動作
・ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラーで開く。
2.使い方
・マクロを実行すると”My Macros”フォルダに”myfolders.txt”が作成されます。
この場所とファイル名は、”file_path”と”file_name”で指定しています。
・”myfolders.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 で作成しました。
// myfolders.js
// 20121121
var file_Name = "myfolders.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;
スポンサーリンク