よく使うフォルダ

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

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;
スポンサーリンク