「特定のフォルダで「ファイルを開く」ダイアログ」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
修正
MSY-07 (トーク | 投稿記録)
空行と改行の除去
 
(2人の利用者による、間の9版が非表示)
1行目: 1行目:
基本的に [ファイル] メニュー >> [開く...] で呼び出される「ファイルを開く」ダイアログは、"アクティブなドキュメントの親フォルダ" か "Mery 起動時の作業フォルダ" などが起点となります。
__toc__
基本的に [ファイル] メニュー >> ['''開く...'''] で呼び出される「ファイルを開く」ダイアログは、"アクティブなドキュメントの親フォルダ" か "さいごに開いたファイルの親フォルダ"、または "Mery 起動時の作業フォルダ" などが起点となります。


<br> このマクロでは「ファイルを開く」ダイアログを呼び出したさい、つねに'''特定のフォルダ'''に強制移動します。
このマクロでは「ファイルを開く」ダイアログを呼び出したさい、つねに '''特定のフォルダ''' に強制移動します。


* ソースコード内でフォルダパスを指定してください。
* ソースコード内の設定項目でフォルダパスを指定してください。<br> ※キー入力のエミュレートだと日本語パスの場合にややこしいことになるので、クリップボード経由でフォルダパスを送信します。
(※日本語パスの場合にもキー入力をエミュレートするとなるとややこしいので、クリップボード経由でフォルダパスを送信します)


== ソースコード ==
ベータ版 2.8.0 以前の Mery (正式版 Ver 2.6.7 も含む) では、こちらのコードをご利用ください。


== ソースコード ==
<syntaxhighlight lang="javascript">
<source lang="javascript">
#title = "開く..."
#title = "開く..."
#tooltip = "ファイル選択ダイアログを開く"
#tooltip = "ファイル選択ダイアログを開く"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",274
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",274


// 任意のフォルダを起点にファイル選択ダイアログを開く
/**
// ファイルの種類: すべてのファイル
* ---------------------------------------------------------
* 特定のフォルダで「ファイルを開く」ダイアログ
* sukemaru, 2018-12-01 - 2020-12-19
* ---------------------------------------------------------
* 指定したフォルダを起点にファイル選択ダイアログを開く
* ファイルの種類: すべてのファイル
*/


// ■フォルダを指定する■(\ はふたつ重ね/末尾にも \\ を付ける)
// ■フォルダを指定する■(\ はふたつ重ね / 末尾にも \\ を付ける)
var folder = "%USERPROFILE%\\デスクトップ\\";
var folder = "%USERPROFILE%\\デスクトップ\\";


var shell = new ActiveXObject( "WScript.Shell" );
var shell = new ActiveXObject( "WScript.Shell" );
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
folder = shell.ExpandEnvironmentStrings( folder );
folder = shell.ExpandEnvironmentStrings( folder );
// クリップボードのデータを退避させて、フォルダパスをセットする
// クリップボードのデータを退避させて、フォルダパスをセットする
if ( fso.FolderExists( folder ) ) {
if ( fso.FolderExists( folder ) ) {
   var cb = ClipboardData.GetData();
   var cb = ClipboardData.GetData();
   ClipboardData.SetData( folder );
   ClipboardData.SetData( folder );
// キー入力をエミュレート(Ctrl+V, Enter, Delete, Alt+T, DownArrow, End, Enter, Alt+N)
 
// Alt+T = 「ファイルの種類(T):」 / Alt+N = 「ファイル名(N):」
  // キー入力をエミュレート(Ctrl+V, Enter, Delete, Alt+T, DownArrow, End, Enter, Alt+N)
  // Alt+T = 「ファイルの種類(T):」 / Alt+N = 「ファイル名(N):」
   shell.SendKeys( "^V~{DEL}%T{DOWN}{END}~%N" );
   shell.SendKeys( "^V~{DEL}%T{DOWN}{END}~%N" );
}
}
// ファイルメニューのコマンド「開く...」
// ファイルメニューのコマンド「開く...」
editor.ExecuteCommandByID( MEID_FILE_OPEN = 2062 );
editor.ExecuteCommandByID( MEID_FILE_OPEN = 2062 );
// クリップボードのデータを復帰
// クリップボードのデータを復帰
if ( cb )
if ( cb )
   ClipboardData.SetData( cb );
   ClipboardData.SetData( cb );
</source>
</syntaxhighlight>
 
== Mery 2.8.1 以降用 ==
Mery ベータ版 Ver 2.8.1 以降で、「クリップボード履歴」(最大16件) の内容を維持します。<br>
ベータ版 2.8.0 以前の Mery (正式版 Ver 2.6.7 も含む) では使用できません。
 
<syntaxhighlight lang="javascript">
#title = "開く..."
#tooltip = "ファイル選択ダイアログを開く"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",274
 
/**
* ---------------------------------------------------------
* 特定のフォルダで「ファイルを開く」ダイアログ
* sukemaru, 2018-12-01 - 2020-05-10
* ---------------------------------------------------------
* 指定したフォルダを起点にファイル選択ダイアログを開く
* ファイルの種類: すべてのファイル
*
* 2020-05-10: Mery 2.8.1 以降の
* ClipboardData 系メソッドの追加引数を利用して、クリップボード履歴を保持
* 【動作要件】 Mery ベータ版 Ver 2.8.1 以降
*/
 
// ---------- ▼ 設定項目 ▼ ---------- //
 
// ■フォルダを指定する( \ はふたつ重ね / 末尾にも \\ を付ける)
var folder = "%USERPROFILE%\\デスクトップ\\";


// ---------- ▲ 設定項目 ▲ ---------- //
var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
var WshShell = new ActiveXObject( "WScript.Shell" );
folder = folder ? WshShell.ExpandEnvironmentStrings( folder )
                : edtor.ActiveDocument.Path;
// クリップボードのデータを退避させて、フォルダパスをセットする
var cb = ClipboardData;
var data0 = cb.GetData( 0 ) || cb.GetData() || "";
var data15 = cb.GetData( 15 ) || "";
if ( folder && Fso.FolderExists( folder ) ) {
  cb.ClearData( 0 );
  cb.SetData( folder );
  // キー入力をエミュレート(Ctrl+V, Enter, Delete, Alt+T, DownArrow, End, Enter, Alt+N)
  // Alt+T = 「ファイルの種類(T):」 / Alt+N = 「ファイル名(N):」
  WshShell.SendKeys( "^V~{DEL}%T{DOWN}{END}~%N" );
}
// ファイルメニューのコマンド「開く...」
editor.ExecuteCommandByID( MEID_FILE_OPEN = 2062 );
// クリップボードのデータを復帰
cb.ClearData( 0 );
if ( data0 ) {
  cb.SetData( data0 );
  // if ( data15 ) {
  //  cb.SetData( data15, 15 );
  // }
}
else {
  cb.ClearData();
}
</syntaxhighlight>


== メモ ==
== メモ ==
* 2018/12/01 (sukemaru)
Windows XP でしか動作確認していません
: 初版
 
* 2018/12/05 (sukemaru)
== 変更履歴 ==
: 第2版: フォルダの実在確認とクリップボードデータの復帰のためのコードを追加
* 1.0.3 (2020-05-10)
* 2018/12/19 (sukemaru)
** Mery 2.8.1 以降の ClipboardData 系メソッドの追加引数を利用してクリップボード履歴を保持
: フォルダ指定の var folder = のうしろのダブルクォートが二重になっていたので修正
*** 外部アプリケーションで OS のクリップボードを監視・管理しているケースを想定していません
: % % で囲った環境変数の展開
* 1.0.2 (2018-12-19)
** フォルダ指定の var folder = のうしろのダブルクォートが二重になっていたので修正
** % % で囲った環境変数の展開
* 1.0.1 (2018-12-05)
** フォルダの実在確認とクリップボードデータの復帰のためのコードを追加
* 1.0.0 (2018-12-01)
** 初版

2024年9月9日 (月) 10:20時点における最新版

基本的に [ファイル] メニュー >> [開く...] で呼び出される「ファイルを開く」ダイアログは、"アクティブなドキュメントの親フォルダ" か "さいごに開いたファイルの親フォルダ"、または "Mery 起動時の作業フォルダ" などが起点となります。

このマクロでは「ファイルを開く」ダイアログを呼び出したさい、つねに 特定のフォルダ に強制移動します。

  • ソースコード内の設定項目でフォルダパスを指定してください。
    ※キー入力のエミュレートだと日本語パスの場合にややこしいことになるので、クリップボード経由でフォルダパスを送信します。

ソースコード[編集]

ベータ版 2.8.0 以前の Mery (正式版 Ver 2.6.7 も含む) では、こちらのコードをご利用ください。

#title = "開く..."
#tooltip = "ファイル選択ダイアログを開く"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",274

/**
 * ---------------------------------------------------------
 * 特定のフォルダで「ファイルを開く」ダイアログ
 * sukemaru, 2018-12-01 - 2020-12-19
 * ---------------------------------------------------------
 * 指定したフォルダを起点にファイル選択ダイアログを開く
 * ファイルの種類: すべてのファイル
 */

// ■フォルダを指定する■(\ はふたつ重ね / 末尾にも \\ を付ける)
var folder = "%USERPROFILE%\\デスクトップ\\";


var shell = new ActiveXObject( "WScript.Shell" );
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
folder = shell.ExpandEnvironmentStrings( folder );

// クリップボードのデータを退避させて、フォルダパスをセットする
if ( fso.FolderExists( folder ) ) {
  var cb = ClipboardData.GetData();
  ClipboardData.SetData( folder );

  // キー入力をエミュレート(Ctrl+V, Enter, Delete, Alt+T, DownArrow, End, Enter, Alt+N)
  // Alt+T = 「ファイルの種類(T):」 / Alt+N = 「ファイル名(N):」
  shell.SendKeys( "^V~{DEL}%T{DOWN}{END}~%N" );
}

// ファイルメニューのコマンド「開く...」
editor.ExecuteCommandByID( MEID_FILE_OPEN = 2062 );

// クリップボードのデータを復帰
if ( cb )
  ClipboardData.SetData( cb );

Mery 2.8.1 以降用[編集]

Mery ベータ版 Ver 2.8.1 以降で、「クリップボード履歴」(最大16件) の内容を維持します。
ベータ版 2.8.0 以前の Mery (正式版 Ver 2.6.7 も含む) では使用できません。

#title = "開く..."
#tooltip = "ファイル選択ダイアログを開く"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",274

/**
 * ---------------------------------------------------------
 * 特定のフォルダで「ファイルを開く」ダイアログ
 * sukemaru, 2018-12-01 - 2020-05-10
 * ---------------------------------------------------------
 * 指定したフォルダを起点にファイル選択ダイアログを開く
 * ファイルの種類: すべてのファイル
 * 
 * 2020-05-10: Mery 2.8.1 以降の
 * ClipboardData 系メソッドの追加引数を利用して、クリップボード履歴を保持
 * 【動作要件】 Mery ベータ版 Ver 2.8.1 以降
 */

// ---------- ▼ 設定項目 ▼ ---------- //

// ■フォルダを指定する( \ はふたつ重ね / 末尾にも \\ を付ける)
var folder = "%USERPROFILE%\\デスクトップ\\";

// ---------- ▲ 設定項目 ▲ ---------- //


var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
var WshShell = new ActiveXObject( "WScript.Shell" );
folder = folder ? WshShell.ExpandEnvironmentStrings( folder )
                : edtor.ActiveDocument.Path;

// クリップボードのデータを退避させて、フォルダパスをセットする
var cb = ClipboardData;
var data0 = cb.GetData( 0 ) || cb.GetData() || "";
var data15 = cb.GetData( 15 ) || "";
if ( folder && Fso.FolderExists( folder ) ) {
  cb.ClearData( 0 );
  cb.SetData( folder );

  // キー入力をエミュレート(Ctrl+V, Enter, Delete, Alt+T, DownArrow, End, Enter, Alt+N)
  // Alt+T = 「ファイルの種類(T):」 / Alt+N = 「ファイル名(N):」
  WshShell.SendKeys( "^V~{DEL}%T{DOWN}{END}~%N" );
}

// ファイルメニューのコマンド「開く...」
editor.ExecuteCommandByID( MEID_FILE_OPEN = 2062 );

// クリップボードのデータを復帰
cb.ClearData( 0 );
if ( data0 ) {
  cb.SetData( data0 );

  // if ( data15 ) {
  //   cb.SetData( data15, 15 );
  // }
}
else {
  cb.ClearData();
}

メモ[編集]

Windows XP でしか動作確認していません

変更履歴[編集]

  • 1.0.3 (2020-05-10)
    • Mery 2.8.1 以降の ClipboardData 系メソッドの追加引数を利用してクリップボード履歴を保持
      • 外部アプリケーションで OS のクリップボードを監視・管理しているケースを想定していません
  • 1.0.2 (2018-12-19)
    • フォルダ指定の var folder = のうしろのダブルクォートが二重になっていたので修正
    • % % で囲った環境変数の展開
  • 1.0.1 (2018-12-05)
    • フォルダの実在確認とクリップボードデータの復帰のためのコードを追加
  • 1.0.0 (2018-12-01)
    • 初版
スポンサーリンク