「よく使うフォルダ」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
SyntaxHighlightにcopyの追加 |
||
| (3人の利用者による、間の18版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | |||
ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラで開く。 | |||
== 機能 == | |||
* マクロを実行するとこのマクロのあるフォルダに登録用ファイル(quickaccess.txt)が作成されます。 | |||
* 登録用ファイルに、フォルダパスとポップアップメニューに表示する内容とを”>>”で区切って、1件1行で書いてください。 | |||
< | * フォルダパスは絶対パスで、”\”で終わっている必要があります。 | ||
* ポップアップメニューに表示する内容がないときは、フォルダパスを表示します。 | |||
* 複数の”>>”があるときは、最後の部分のみが表示されます。つまり、例1と例2は同じ表示になります。 | |||
** (例1)C:\Program Files (x86)\Mery\>>Meryのフォルダ | |||
** (例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ | |||
== ソースコード == | |||
<syntaxhighlight lang="javascript" copy> | |||
// quickaccess.js | // quickaccess.js | ||
// | // 2012-11-21 | ||
// 2012-12-19 | |||
// 2013-02-23 | |||
// 2014-02-22 | |||
// | var file_FullName = changeExt( ScriptFullName, "txt" ); | ||
// | var WshShell = new ActiveXObject( "WScript.Shell" ); | ||
var FSO = new ActiveXObject( "Scripting.FileSystemObject" ); | |||
var file_Name = FSO.GetFileName( file_FullName ); | |||
// | // ファイルを開く。 | ||
// | // 第2引数:オープンモード。 | ||
var | // 第3引数:ファイルが存在しなかったとき。 | ||
var | // 第4引数:開くファイルの形式。 | ||
var TRISTATE_USEDEFAULT | // TRISTATE_TRUE:Unicode | ||
var objFile = | // 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 = FSO.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行目: | 45行目: | ||
var offset = 10; // 固定メニュー数の上限。 | var offset = 10; // 固定メニュー数の上限。 | ||
var menu = CreatePopupMenu(); | var menu = CreatePopupMenu(); | ||
var submenu = CreatePopupMenu(); | var submenu = CreatePopupMenu(); | ||
for (var i | for ( var i = 0; i < folderAry.length; i++ ){ | ||
// ">>"でフォルダパスと表示名に分離。 | |||
var item = folderAry[ i ].split( ">>" ); | |||
menu.Add( item.slice ( -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( file_Name + "を開く", 4, 0 ); | |||
var r = menu.Track(mePosMouse); | var r = menu.Track( mePosMouse ); | ||
switch(r){ | switch( r ){ | ||
case 0: break; | |||
case 1: | |||
var d = Editor.FullName.replace( "Mery.exe", "") ; | |||
// var d = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" ); | |||
// var d = new ActiveXObject( "WScript.Shell" ).ExpandEnvironmentStrings( "%USERPROFILE%" ); | |||
d = ( Document.path == "" )? d : Document.path ; | |||
new ActiveXObject( "shell.application" ).open( d ); | |||
break; | |||
case 2: | |||
var folder_user = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" ); | |||
new ActiveXObject( "shell.application" ).open( folder_user ); | |||
break; | |||
case 3: | |||
path = ( document.path == "" )? getPath( Editor.FullName ): document.path; | |||
var input = prompt( "フォルダパス(>>表示名)を入力してください。", path + ">>" ) | |||
if ( input != "" ){ | |||
var objFile = FSO.OpenTextFile( file_FullName, openMode.FORAPPENDING, create.YES, format.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 ]; | |||
new ActiveXObject( "shell.application" ).open( folderName ); | |||
} | |||
} | } | ||
// | // “filefullname”をエディタで開いていれば“true”。 | ||
function isOpened( | 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() ); | |||
if( result ){ return result }; | |||
} | |||
return result; | |||
} | } | ||
// ファイルのパス部分を返す。 | // ファイルのパス部分を返す。 | ||
function getPath(file_FullPath | function getPath( file_FullPath ){ | ||
return new ActiveXObject( "Scripting.FileSystemObject" ).GetParentFolderName( file_FullPath ); | |||
} | |||
// | |||
// 拡張子の変更 | |||
function changeExt( filename, ext ){ | |||
var FSO = new ActiveXObject( "Scripting.FileSystemObject" ); | |||
var path = FSO.GetParentFolderName( filename ); | |||
path += ( path.length > 0 )? "\\" : "" ; | |||
var bname = FSO.GetBaseName( filename ); | |||
ext = ( typeof( ext ) != "undfined" || ext.length > 0 ) ? "." + ext : "" ; | |||
return path + bname + ext; | |||
} | } | ||
</syntaxhighlight> | |||
== 変更履歴 == | |||
* 1.0.3 (2014-02-22) | |||
** tasklistを使わないように変更しました。quickaccess.logというファイルは作成されません | |||
** 関数を入れ替えました | |||
* 1.0.2 (2013-02-23) | |||
** ファイルオープン時の定数指定の誤りを修正 | |||
* 1.0.1 (2012-12-19) | |||
** すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました | |||
*** tasklist の結果を保存するため、quickaccess.logというファイルを作成します | |||
*** ウィンドウタイトルが得られないケースがあるので不完全です | |||
** 関数の入れ替え・追加・変更をしました | |||
* 1.0.0 (2012-11-21) | |||
** 初版 | |||
== その他 == | |||
不具合があったら教えていただけると幸いです。 | |||
2025年6月30日 (月) 00:20時点における最新版
概要[編集]
ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラで開く。
機能[編集]
- マクロを実行するとこのマクロのあるフォルダに登録用ファイル(quickaccess.txt)が作成されます。
- 登録用ファイルに、フォルダパスとポップアップメニューに表示する内容とを”>>”で区切って、1件1行で書いてください。
- フォルダパスは絶対パスで、”\”で終わっている必要があります。
- ポップアップメニューに表示する内容がないときは、フォルダパスを表示します。
- 複数の”>>”があるときは、最後の部分のみが表示されます。つまり、例1と例2は同じ表示になります。
- (例1)C:\Program Files (x86)\Mery\>>Meryのフォルダ
- (例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ
ソースコード[編集]
// quickaccess.js
// 2012-11-21
// 2012-12-19
// 2013-02-23
// 2014-02-22
var file_FullName = changeExt( ScriptFullName, "txt" );
var WshShell = new ActiveXObject( "WScript.Shell" );
var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var file_Name = FSO.GetFileName( file_FullName );
// ファイルを開く。
// 第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 = FSO.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 menu = CreatePopupMenu();
var submenu = CreatePopupMenu();
for ( var i = 0; i < folderAry.length; i++ ){
// ">>"でフォルダパスと表示名に分離。
var item = folderAry[ i ].split( ">>" );
menu.Add( item.slice ( -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:
var d = Editor.FullName.replace( "Mery.exe", "") ;
// var d = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" );
// var d = new ActiveXObject( "WScript.Shell" ).ExpandEnvironmentStrings( "%USERPROFILE%" );
d = ( Document.path == "" )? d : Document.path ;
new ActiveXObject( "shell.application" ).open( d );
break;
case 2:
var folder_user = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" );
new ActiveXObject( "shell.application" ).open( folder_user );
break;
case 3:
path = ( document.path == "" )? getPath( Editor.FullName ): document.path;
var input = prompt( "フォルダパス(>>表示名)を入力してください。", path + ">>" )
if ( input != "" ){
var objFile = FSO.OpenTextFile( file_FullName, openMode.FORAPPENDING, create.YES, format.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 ];
new ActiveXObject( "shell.application" ).open( folderName );
}
}
// “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() );
if( result ){ return result };
}
return result;
}
// ファイルのパス部分を返す。
function getPath( file_FullPath ){
return new ActiveXObject( "Scripting.FileSystemObject" ).GetParentFolderName( file_FullPath );
}
// 拡張子の変更
function changeExt( filename, ext ){
var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var path = FSO.GetParentFolderName( filename );
path += ( path.length > 0 )? "\\" : "" ;
var bname = FSO.GetBaseName( filename );
ext = ( typeof( ext ) != "undfined" || ext.length > 0 ) ? "." + ext : "" ;
return path + bname + ext;
}
変更履歴[編集]
- 1.0.3 (2014-02-22)
- tasklistを使わないように変更しました。quickaccess.logというファイルは作成されません
- 関数を入れ替えました
- 1.0.2 (2013-02-23)
- ファイルオープン時の定数指定の誤りを修正
- 1.0.1 (2012-12-19)
- すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました
- tasklist の結果を保存するため、quickaccess.logというファイルを作成します
- ウィンドウタイトルが得られないケースがあるので不完全です
- 関数の入れ替え・追加・変更をしました
- すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました
- 1.0.0 (2012-11-21)
- 初版
その他[編集]
不具合があったら教えていただけると幸いです。
スポンサーリンク