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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
マークアップの修正
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
(同じ利用者による、間の6版が非表示)
11行目: 11行目:
** (例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ
** (例2)C:\Program Files (x86)\Mery\>>ほげ>>ほげ>>Meryのフォルダ


== コード ==
== ソースコード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript" copy>
// quickaccess.js
// quickaccess.js
// 2012/11/21
// 2012-11-21
// 2012/12/19
// 2012-12-19
// 2013/02/23
// 2013-02-23
// 2014/02/22
// 2014-02-22




123行目: 123行目:
</syntaxhighlight>
</syntaxhighlight>


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


== その他 ==
== その他 ==
不具合があったら教えていただけると幸いです。
不具合があったら教えていただけると幸いです。

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)
    • 初版

その他[編集]

不具合があったら教えていただけると幸いです。

スポンサーリンク