「よく使うフォルダ」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
手石 (トーク | 投稿記録)
編集の要約なし
手石 (トーク | 投稿記録)
編集の要約なし
1行目: 1行目:
quickaccess_readme.txt<br>
= 概要 =
// 2012/11/21<br>
ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラで開く。
// 2012/12/19<br>
// 2013/02/23<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>
2013/02/23
・ファイルオープン時の定数指定の誤りを修正。<br>
<br>
<pre>


= 機能 =
* マクロを実行するとこのマクロのあるフォルダに登録用ファイル(quickaccess.txt)が作成されます。
* 登録用ファイルに、フォルダパスとポップアップメニューに表示する内容とを”>>”で区切って、1件1行で書いてください。
* フォルダパスは絶対パスで、”\”で終わっている必要があります。
* ポップアップメニューに表示する内容がないときは、フォルダパスを表示します。
* 複数の”>>”があるときは、最後の部分のみが表示されます。つまり、例1と例2は同じ表示になります。
(例1)C:\Program Files (x86)\Mery\>>Meryのフォルダ
(例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ
= コード =
<source lang="javascript">
// quickaccess.js
// quickaccess.js
// 2012/11/21
// 2012/11/21
// 2012/12/19
// 2012/12/19
// 2013/02/23
// 2014/02/22


var file_FullName = changeExt( ScriptFullName, "txt" );
var file_FullName = changeExt( ScriptFullName, "txt" );
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 FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var file_Name = FSO.GetFileName( file_FullName );


// ファイルを開く。
// ファイルを開く。
50行目: 35行目:
var create = { YES: true, NO: false }
var create = { YES: true, NO: false }
var format = { TRISTATE_TRUE: -1, TRISTATE_FALSE: 0, TRISTATE_USEDEFAULT: -2 };
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 objFile = FSO.OpenTextFile( file_FullName, openMode.FORREADING, create.YES, format.TRISTATE_FALSE );


// 一行ずつ読み込んで配列に。
// 一行ずつ読み込んで配列に。
60行目: 45行目:


var offset = 10; // 固定メニュー数の上限。
var offset = 10; // 固定メニュー数の上限。
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 = 0; i < folderAry.length; i++ ){  
// >>”でフォルダパスと表示名に分離。
// ">>"でフォルダパスと表示名に分離。
var item = folderAry[ i ].split( ">>" );
    var item = folderAry[ i ].split( ">>" );
item_0 = item[ 0 ];
    menu.Add( item.slice ( -1 ), i + offset, 0 );
item_1 = item.slice ( -1 );
if ( reg.test( item_0 ) ){
menu.Add( item_1, +i + offset, 0 );
}
}
}
menu.Add( "-------", 0, meMenuSeparator )
menu.Add( "-------", 0, meMenuSeparator )
77行目: 57行目:
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 + '"' );
        var WshShell = new ActiveXObject( "WScript.Shell" );
break;
        if ( !WshShell.AppActivate( Document.path ) ){
case 2:
            new ActiveXObject( "shell.application" ).open( Document.path );
var folder_user = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" )
//          new ActiveXObject( "WScript.Shell" ).Run( 'explorer "' + FSO.GetParentFolderName( Macro_Name ) + '"' );
WshShell.Run( 'explorer "' + folder_user + '"' );
        };
break;
        break;
case 3:
    case 2:
path = ( document.path == "" )? getPath( Editor.FullName ): document.path;
        var folder_user = WshShell.SpecialFolders( "Desktop" ).replace( "Desktop","" )
var input = prompt( "フォルダパス(>>表示名)を入力してください。", path + ">>" )
        WshShell.Run( 'explorer "' + folder_user + '"' );
if ( input != "" ){  
        break;
var objFile = objFso.OpenTextFile( file_FullName, openMode.FORAPPENDING, create.YES, format.TRISTATE_FALSE );
    case 3:
objFile.WriteLine( input );
        path = ( document.path == "" )? getPath( Editor.FullName ): document.path;
objFile.close();
        var input = prompt( "フォルダパス(>>表示名)を入力してください。", path + ">>" )
}
        if ( input != "" ){  
break;
            var objFile = FSO.OpenTextFile( file_FullName, openMode.FORAPPENDING, create.YES, format.TRISTATE_FALSE );
case 4:
            objFile.WriteLine( input );
if ( !isOpened( file_FullName ) ){  
            objFile.close();
Editor.NewFile();
        }
Editor.Documents.Item( editor.Documents.Count-1 ).Activate();
        break;
}
    case 4:
Editor.OpenFile( file_FullName );
        if ( !isOpened( file_FullName ) ){  
break;
            Editor.NewFile();
default :
            Editor.Documents.Item( editor.Documents.Count-1 ).Activate();
if ( r >= offset ){
        }
var folderName = folderAry[ r-offset ].split( ">" )[ 0 ];
        Editor.OpenFile( file_FullName );
var pid = isFolderOpened( folderName );
        break;
if ( pid == -1 ){
    default :
WshShell.Run( 'explorer "' + folderName + '"' )
        if ( r >= offset ){
}else{
            var folderName = folderAry[ r-offset ].split( ">>" )[ 0 ];
WshShell.AppActivate( pid )
            var WshShell = new ActiveXObject( "WScript.Shell" );
};
            if ( !WshShell.AppActivate( folderName ) ){
}
                new ActiveXObject( "shell.application" ).open( folderName );
//              new ActiveXObject( "WScript.Shell" ).Run( 'explorer "' + FSO.GetParentFolderName( Macro_Name ) + '"' );
            };
        }
}
}
objFile = null;
objFso = null;
WshShell = null;


// “filefullname”をエディタで開いていれば“true”。
// “filefullname”をエディタで開いていれば“true”。
function isOpened( filefullname ){  
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 ).FullName.toUpperCase() == filefullname.toUpperCase() );
        result = ( result || Editor.Documents.Item( i ).FullName.toUpperCase() == filefullname.toUpperCase() );
}
        if( result ){ return result };
return result;
    }
    return result;
}
}


// ファイルのパス部分を返す。
// ファイルのパス部分を返す。
function getPath( file_FullPath ){  
function getPath( file_FullPath ){
var ary = file_FullPath.split( "\\" );
    return new ActiveXObject( "Scripting.FileSystemObject" ).GetParentFolderName( file_FullPath );
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 ){
function changeExt( filename, ext ){
var s = filename.split( "\\" );
  var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var f = s.pop().split( "." );
  var path = FSO.GetParentFolderName( filename );
if ( f.length >= 2 ){
  path += ( path.length > 0 )? "\\" : "" ;
f.splice( -1, 1, ext );
  var bname = FSO.GetBaseName( filename );
}else{
  ext = ( typeof( ext ) != "undfined" || ext.length > 0 ) ? "." + ext : "" ;
f.push( ext );
  return path + bname + ext;
}
s.push( f.join( "." ) );
return s.join( "\\" );
}
}


</pre>
</source>
 
= 履歴 =
* 2012/11/21 初版
* 2012/12/19
# すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました。
#:→ tasklist の結果を保存するため、quickaccess.logというファイルを作成します。
#:→ ウィンドウタイトルが得られないケースがあるので不完全です。
# 関数の入れ替え・追加・変更をしました。
* 2013/02/23
# ファイルオープン時の定数指定の誤りを修正。
* 2014/02/22
# tasklistを使わないように変更しました。quickaccess.logというファイルは作成されません。
# 関数を入れ替えました。
 
= その他 =
* 不具合があったら教えていただけると幸いです。

2014年2月23日 (日) 00:38時点における版

概要

ポップアップメニューにあらかじめ登録したフォルダの一覧を表示し、エクスプローラで開く。

機能

  • マクロを実行するとこのマクロのあるフォルダに登録用ファイル(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 WshShell = new ActiveXObject( "WScript.Shell" );
        if ( !WshShell.AppActivate( Document.path ) ){
            new ActiveXObject( "shell.application" ).open( Document.path );
//          new ActiveXObject( "WScript.Shell" ).Run( 'explorer "' + FSO.GetParentFolderName( Macro_Name ) + '"' );
        };
        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 = 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 ];
            var WshShell = new ActiveXObject( "WScript.Shell" );
            if ( !WshShell.AppActivate( folderName ) ){
                new ActiveXObject( "shell.application" ).open( folderName );
//              new ActiveXObject( "WScript.Shell" ).Run( 'explorer "' + FSO.GetParentFolderName( Macro_Name ) + '"' );
            };
        }
}

// “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;
}

履歴

  • 2012/11/21 初版
  • 2012/12/19
  1. すでにフォルダが開かれているときは、新しく開かずにアクティブになるようにしました。
    → tasklist の結果を保存するため、quickaccess.logというファイルを作成します。
    → ウィンドウタイトルが得られないケースがあるので不完全です。
  2. 関数の入れ替え・追加・変更をしました。
  • 2013/02/23
  1. ファイルオープン時の定数指定の誤りを修正。
  • 2014/02/22
  1. tasklistを使わないように変更しました。quickaccess.logというファイルは作成されません。
  2. 関数を入れ替えました。

その他

  • 不具合があったら教えていただけると幸いです。
スポンサーリンク