「よく使うフォルダ」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
編集の要約なし |
||
| 1行目: | 1行目: | ||
quickaccess_readme.txt<br> | |||
// 2012/11/21<br> | |||
// 2012/12/19<br> | |||
<br> | |||
1.動作<br> | |||
・ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラーで開く。<br> | |||
<br> | |||
2.使い方<br> | |||
・マクロを実行するとこのマクロのあるフォルダに登録用ファイル(quickaccess.txt)が作成されます。<br> | |||
・登録用ファイルに、フォルダパスとポップアップメニューに表示する内容とを”>>”で区切って、1件1行で書いてください。<br> | |||
・フォルダパスは絶対パスで、”\”で終わっている必要があります。<br> | |||
・ポップアップメニューに表示する内容がないときは、フォルダパスを表示します。<br> | |||
・複数の”>>”があるときは、最後の部分のみが表示されます。つまり、例1と例2は同じ表示になります。<br> | |||
(例1)C:\Program Files (x86)\Mery\>>Meryのフォルダ<br> | |||
(例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ<br> | |||
<br> | |||
3.その他<br> | |||
・Mery 2.0.11.3997、Windows7 x64 Home sp1 で作成しました。<br> | |||
<br> | |||
[更新履歴]<br> | |||
2012/12/19<br> | |||
・すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました。<br> | |||
→ tasklist の結果を保存するため、quickaccess.logというファイルを作成します。 <br> | |||
→ ウィンドウタイトルが得られないケースがあるので不完全ですが……。<br> | |||
・関数の入れ替え・追加・変更。<br> | |||
<br> | |||
<br> | |||
<pre> | <pre> | ||
// quickaccess.js | // quickaccess.js | ||
// | // 2012/11/21 | ||
// 2012/12/19 | |||
var | var file_FullName = changeExt( ScriptFullName, "txt" ); | ||
var file_FullName | var file_Name = file_FullName.split( "\\" ).pop(); | ||
var WshShell = new ActiveXObject("WScript.Shell"); | var WshShell = new ActiveXObject( "WScript.Shell" ); | ||
var objFso = new ActiveXObject("Scripting.FileSystemObject"); | var objFso = new ActiveXObject( "Scripting.FileSystemObject" ); | ||
// | // ファイルを開く。 | ||
// 第2引数:オープンモード。 | // 第2引数:オープンモード。 | ||
// 第3引数:ファイルが存在しなかったとき。 | |||
// 第4引数:開くファイルの形式。 | // 第4引数:開くファイルの形式。 | ||
var | // TRISTATE_TRUE:Unicode | ||
var | // TRISTATE_FALSE:ASCII | ||
var TRISTATE_USEDEFAULT | // TRISTATE_USEDEFAULT:システムデフォルト | ||
var objFile = objFso.OpenTextFile(file_FullName, FORREADING, | var openMode = { FORREADING: 1, FORWRITING: 2, FORAPPENDING: 8 }; | ||
var create = { YES: true, NO: false } | |||
var format = { TRISTATE_TRUE: -1, TRISTATE_FALSE: 0, TRISTATE_USEDEFAULT: -2 }; | |||
var objFile = objFso.OpenTextFile( file_FullName, openMode.FORREADING, create.YES, format.TRISTATE_FALSE ); | |||
// 一行ずつ読み込んで配列に。 | // 一行ずつ読み込んで配列に。 | ||
var folderAry = []; | var folderAry = []; | ||
while (!objFile.AtEndOfStream){ | while ( !objFile.AtEndOfStream ){ folderAry.push( objFile.ReadLine() ) } | ||
} | |||
// 読み終わったファイルを閉じる。 | // 読み終わったファイルを閉じる。 | ||
| 48行目: | 57行目: | ||
var offset = 10; // 固定メニュー数の上限。 | var offset = 10; // 固定メニュー数の上限。 | ||
var reg = new RegExp("^[a-zA-Z]:\\\\(. | var reg = new RegExp( "^[a-zA-Z]:\\\\(.+\\\\)*$" ); // フォルダを表す正規表現のつもり。 | ||
var menu = CreatePopupMenu(); | var menu = CreatePopupMenu(); | ||
var submenu = CreatePopupMenu(); | var submenu = CreatePopupMenu(); | ||
for (var i in folderAry){ | for ( var i in folderAry ){ | ||
// “>>”でフォルダパスと表示名に分離。 | // “>>”でフォルダパスと表示名に分離。 | ||
var item = folderAry[i].split(">>"); | var item = folderAry[ i ].split( ">>" ); | ||
item_0 = item[0]; | item_0 = item[ 0 ]; | ||
item_1 = | item_1 = item.slice ( -1 ); | ||
if (reg.test(item_0)){ | if ( reg.test( item_0 ) ){ | ||
menu.Add(item_1, +i + offset, 0); | menu.Add( item_1, +i + offset, 0 ); | ||
} | } | ||
} | } | ||
menu.Add("-------", 0, meMenuSeparator) | menu.Add( "-------", 0, meMenuSeparator ) | ||
menu.Add("このドキュメントのフォルダ", 1, 0) | menu.Add( "このドキュメントのフォルダ", 1, 0 ) | ||
menu.Add("ユーザーフォルダ", 2, 0) | menu.Add( "ユーザーフォルダ", 2, 0 ) | ||
menu.Add("-------", 0, meMenuSeparator) | menu.Add( "-------", 0, meMenuSeparator ) | ||
menu.AddPopup("設定", submenu); | menu.AddPopup( "設定", submenu ); | ||
submenu.Add("フォルダの追加", 3, 0); | submenu.Add( "フォルダの追加", 3, 0 ); | ||
submenu.Add(file_Name + "を開く", 4, 0); | submenu.Add( file_Name + "を開く", 4, 0 ); | ||
var r = menu.Track(mePosMouse); | var r = menu.Track( mePosMouse ); | ||
switch(r){ | switch( r ){ | ||
case 0: break; | case 0: break; | ||
case 1: | case 1: | ||
WshShell.Run('explorer "' + Document.path + '"'); | WshShell.Run( 'explorer "' + Document.path + '"' ); | ||
break; | break; | ||
case 2: | case 2: | ||
var folder_user = WshShell.SpecialFolders("Desktop").replace("Desktop","") | var folder_user = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" ) | ||
WshShell.Run('explorer "' + folder_user + '"'); | WshShell.Run( 'explorer "' + folder_user + '"' ); | ||
break; | break; | ||
case 3: | case 3: | ||
path = (document.path == "")? getPath(Editor.FullName): document.path; | path = ( document.path == "" )? getPath( Editor.FullName ): document.path; | ||
var input = prompt("フォルダパス(>>表示名)を入力してください。", path + ">>" ) | var input = prompt( "フォルダパス(>>表示名)を入力してください。", path + ">>" ) | ||
if (input != ""){ | if ( input != "" ){ | ||
var objFile = objFso.OpenTextFile(file_FullName, FORAPPENDING, true, TRISTATE_FALSE ); | var objFile = objFso.OpenTextFile( file_FullName, FORAPPENDING, true, TRISTATE_FALSE ); | ||
objFile.WriteLine(input); | objFile.WriteLine( input ); | ||
objFile.close(); | objFile.close(); | ||
} | |||
break; | break; | ||
case 4: | case 4: | ||
if (!isOpened( | if ( !isOpened( file_FullName ) ){ | ||
Editor.NewFile(); | Editor.NewFile(); | ||
Editor.Documents.Item(editor.Documents.Count-1).Activate(); | Editor.Documents.Item( editor.Documents.Count-1 ).Activate(); | ||
} | |||
Editor.OpenFile(file_FullName); | Editor.OpenFile( file_FullName ); | ||
break; | break; | ||
default : | default : | ||
if (r >= offset){ | if ( r >= offset ){ | ||
var folderName = folderAry[ r-offset ].split( ">" )[ 0 ]; | |||
var pid = isFolderOpened( folderName ); | |||
if ( pid == -1 ){ | |||
WshShell.Run( 'explorer "' + folderName + '"' ) | |||
}else{ | |||
WshShell.AppActivate( pid ) | |||
}; | |||
} | |||
} | } | ||
// | objFile = null; | ||
function isOpened( | objFso = null; | ||
WshShell = null; | |||
// “filefullname”をエディタで開いていれば“true”。 | |||
function isOpened( filefullname ){ | |||
var result = false; | var result = false; | ||
for (var i = Editor.Documents.Count-1; i>=0; i--){ | for ( var i = Editor.Documents.Count-1; i>=0; i-- ){ | ||
result = (result || Editor.Documents.Item(i). | result = ( result || Editor.Documents.Item( i ).FullName.toUpperCase() == filefullname.toUpperCase() ); | ||
} | } | ||
return result; | return result; | ||
| 108行目: | 129行目: | ||
// ファイルのパス部分を返す。 | // ファイルのパス部分を返す。 | ||
function getPath(file_FullPath | function getPath( file_FullPath ){ | ||
var ary = file_FullPath.split( "\\" ); | |||
ary.pop(); | |||
// if (! | return ary.join( "\\" ) + "\\"; | ||
} | |||
var ary = | |||
function isFolderOpened( str ){ | |||
var stdout_log = changeExt( ScriptFullName, "log" ); | |||
var cmd = 'cmd /c tasklist /fi "imagename eq explorer.exe" /fo csv /v > "' + stdout_log + '"'; | |||
var WshShell = new ActiveXObject( "WScript.Shell" ); | |||
var windowStyle = { HIDE: 0, NORMALFOCUS: 1 }; | |||
WshShell.Run( cmd, windowStyle.HIDE, true ); | |||
WshShell = null; | |||
var objFso = new ActiveXObject( "Scripting.FileSystemObject" ); | |||
if ( !objFso.FileExists( stdout_log ) ){ Quit() } | |||
var objFile = objFso.OpenTextFile( stdout_log, openMode.FORREADING, create.NO, format.TRISTATE_FALSE ); | |||
var ary = []; | |||
while ( !objFile.AtEndOfStream ){ ary.push( objFile.ReadLine() ) } | |||
objFile.Close(); | |||
objFile = null; | |||
objFso = null; | |||
for ( var i = 0; i < ary.length; i++ ){ | |||
var item = ary[ i ].split( "," ).pop().replace( /\"/ig, "" ) + "\\"; | |||
if ( item.toUpperCase() == str.toUpperCase() ){ return ary[ i ].split( "," )[ 1 ].replace( /\"/ig, "" ) } | |||
} | |||
return -1; | |||
} | |||
// 拡張子の変更 | |||
function changeExt( filename, ext ){ | |||
var s = filename.split( "\\" ); | |||
var f = s.pop().split( "." ); | |||
if ( f.length >= 2 ){ | |||
f.splice( -1, 1, ext ); | |||
}else{ | |||
f.push( ext ); | |||
} | |||
s.push( f.join( "." ) ); | |||
return s.join( "\\" ); | |||
} | } | ||
</pre> | </pre> | ||
2012年12月21日 (金) 16:27時点における版
quickaccess_readme.txt
// 2012/11/21
// 2012/12/19
1.動作
・ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラーで開く。
2.使い方
・マクロを実行するとこのマクロのあるフォルダに登録用ファイル(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 で作成しました。
[更新履歴]
2012/12/19
・すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました。
→ tasklist の結果を保存するため、quickaccess.logというファイルを作成します。
→ ウィンドウタイトルが得られないケースがあるので不完全ですが……。
・関数の入れ替え・追加・変更。
// quickaccess.js
// 2012/11/21
// 2012/12/19
var file_FullName = changeExt( ScriptFullName, "txt" );
var file_Name = file_FullName.split( "\\" ).pop();
var WshShell = new ActiveXObject( "WScript.Shell" );
var objFso = new ActiveXObject( "Scripting.FileSystemObject" );
// ファイルを開く。
// 第2引数:オープンモード。
// 第3引数:ファイルが存在しなかったとき。
// 第4引数:開くファイルの形式。
// TRISTATE_TRUE:Unicode
// TRISTATE_FALSE:ASCII
// TRISTATE_USEDEFAULT:システムデフォルト
var openMode = { FORREADING: 1, FORWRITING: 2, FORAPPENDING: 8 };
var create = { YES: true, NO: false }
var format = { TRISTATE_TRUE: -1, TRISTATE_FALSE: 0, TRISTATE_USEDEFAULT: -2 };
var objFile = objFso.OpenTextFile( file_FullName, openMode.FORREADING, create.YES, format.TRISTATE_FALSE );
// 一行ずつ読み込んで配列に。
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.slice ( -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_FullName ) ){
Editor.NewFile();
Editor.Documents.Item( editor.Documents.Count-1 ).Activate();
}
Editor.OpenFile( file_FullName );
break;
default :
if ( r >= offset ){
var folderName = folderAry[ r-offset ].split( ">" )[ 0 ];
var pid = isFolderOpened( folderName );
if ( pid == -1 ){
WshShell.Run( 'explorer "' + folderName + '"' )
}else{
WshShell.AppActivate( pid )
};
}
}
objFile = null;
objFso = null;
WshShell = null;
// “filefullname”をエディタで開いていれば“true”。
function isOpened( filefullname ){
var result = false;
for ( var i = Editor.Documents.Count-1; i>=0; i-- ){
result = ( result || Editor.Documents.Item( i ).FullName.toUpperCase() == filefullname.toUpperCase() );
}
return result;
}
// ファイルのパス部分を返す。
function getPath( file_FullPath ){
var ary = file_FullPath.split( "\\" );
ary.pop();
return ary.join( "\\" ) + "\\";
}
function isFolderOpened( str ){
var stdout_log = changeExt( ScriptFullName, "log" );
var cmd = 'cmd /c tasklist /fi "imagename eq explorer.exe" /fo csv /v > "' + stdout_log + '"';
var WshShell = new ActiveXObject( "WScript.Shell" );
var windowStyle = { HIDE: 0, NORMALFOCUS: 1 };
WshShell.Run( cmd, windowStyle.HIDE, true );
WshShell = null;
var objFso = new ActiveXObject( "Scripting.FileSystemObject" );
if ( !objFso.FileExists( stdout_log ) ){ Quit() }
var objFile = objFso.OpenTextFile( stdout_log, openMode.FORREADING, create.NO, format.TRISTATE_FALSE );
var ary = [];
while ( !objFile.AtEndOfStream ){ ary.push( objFile.ReadLine() ) }
objFile.Close();
objFile = null;
objFso = null;
for ( var i = 0; i < ary.length; i++ ){
var item = ary[ i ].split( "," ).pop().replace( /\"/ig, "" ) + "\\";
if ( item.toUpperCase() == str.toUpperCase() ){ return ary[ i ].split( "," )[ 1 ].replace( /\"/ig, "" ) }
}
return -1;
}
// 拡張子の変更
function changeExt( filename, ext ){
var s = filename.split( "\\" );
var f = s.pop().split( "." );
if ( f.length >= 2 ){
f.splice( -1, 1, ext );
}else{
f.push( ext );
}
s.push( f.join( "." ) );
return s.join( "\\" );
}
スポンサーリンク