Windows 10 のクイックアクセスNo.09296
n'Guin さん 21/05/31 12:19
 
いつもお世話になっております。

Windows 10 標準の Explorer では、左上にクイックアクセスがあります。
秀丸ファイラーで、クイックアクセスを表示させるにはどうしたらいいでしょうか。

秀丸ファイラー上でも、フォルダやドライブを右クリックすると、「クイックアクセ
スにピン留めする」がでてきます。 クイックアクセスは、さまざまなソフトで保存
するときなど、フォルダをたどらずともショートカットして保存先を決定できるので、
便利に使っています。

今更ながらですが、ヘルプをみても、どうしたらよいのかわかりませんでした。 な
お、ブックマークがあるから、そちらを使ってくださいというのは不可です。 ワー
ドやエクセルで、保存先をショートカットするのは、秀丸ファイラーのブックマーク
を使えないからです。

以上、よろしくお願いします。

[ ]
RE:09296 Windows 10 のクイックアクセスNo.09297
秀丸担当 さん 21/05/31 15:13
 

秀丸ファイラーClassicでは、クイックアクセスを表示することはできないです。
表示できるのはデスクトップを根本とするツリー構造のみになっています。
もしかしたら、デスクトップの根本から辿ったどこかにクイックアクセスに相当する
ものがあるのかもしれないですが、どこにあるのかわかりませんでした。たぶん無い
ような気がします。
もしどなたかご存知でしたら教えてもらえると助かります。
もしあったとしたら、そのフォルダをリンクバーに登録するとできるようになると思
います。

[ ]
RE:09297 Windows 10 のクイックアクセスNo.09298
さん 21/05/31 19:23
 
 こんにちは、1ユーザーの陸といいます。

 とりあえず、手っ取り早くやるには、下記のスクリプトをShift_JisかBOM付きのUT
F-16として「QuickAccess.js」みたいな適当な名前で保存して、「ツール」の「ツー
ルの整理」にて追加して、それを実行してみて下さい。
 詳しい追加方法等は、ヘルプをごらんください。
 クイックアクセスの内容をメニュー表示して、選んだフォルダを新規タブとして開
きます。
 何か要望があれば、ご返信下さい。
 ちなみに、ライブラリに載せるかどうかは未定です。
 秀丸ファイラーClassicになんらかの形でクイックアクセスを表示する機能がつけ
ば一番よいので、もしそうなったらライブラリには載せないと思います。

----- スクリプト内容ここから -----
// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var MenuList = new ActiveXObject("Scripting.Dictionary");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");
var FolderItems = FolderObj.Items();
for (i = 0; i < FolderItems.Count; i++){
 MenuList.add(i, FolderItems.Item(i).Path);
}
var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}
open(MenuList(ret - 1), 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプト内容ここまで -----

 担当さん向けに技術的なことを少し補足します。
 ShellApplicationのNameSpaceで「shell:::{679F85CB-0220-4080-B29B-5540CC05AA
B6}」を指定してオブジェクトを作成して、Itemsでフォルダ一覧を列挙しています。
 ただ、この「shell:::{679F85CB-0220-4080-B29B-5540CC05AAB6}」というのは特殊
なフォルダだと思われます。
 その証拠に、ファイル名を指定して実行とかから普通に開いても、ドキュメントフ
ォルダが開いてしまいます。

 ちなみに、このスクリプトは、下記のPowerShell向けの記述を参考にしました。
 一応、特定のフォルダをクイックアクセスに追加したり、削除したりもできるよう
です。

https://stackoverflow.com/questions/36739317/programatically-pin-unpin-the-folder-from-quick-access-menu-in-windows-10

 何かの参考になれば幸いです。

 それでは。

[ ]
RE:09298 Windows 10 のクイックアクセスNo.09299
n'Guin さん 21/05/31 20:04
 
陸さん、ありがとうございます。

早速やってみたいと思います。
大変助かりました。

> とりあえず、手っ取り早くやるには、下記のスクリプトをShift_JisかBOM付きのU
>TF-16として「QuickAccess.js」みたいな適当な名前で保存して、「ツール」の
>「ツールの整理」にて追加して、それを実行してみて下さい。
(後略)


ありがとうございました。

[ ]
RE:09298 Windows 10 のクイックアクセスNo.09301
n'Guin さん 21/06/01 07:41
 
陸さん、おはようございます。

> クイックアクセスの内容をメニュー表示して、選んだフォルダを新規タブとして
>開きます。
> 何か要望があれば、ご返信下さい。

スクリプトを実行したところ、クイックアクセス下にあるフォルダと
とたくさんのファイルが表示されました。

Explorer では、フォルダだけが表示されています。 
ファイル名は表示されていません。
私の設定ミスがあるのでしょうか。

教えていただければ助かります。 よろしくお願いいたします。

追伸:先の取り消しは、間違いがあったためです。

[ ]
RE:09301 Windows 10 のクイックアクセスNo.09302
さん 21/06/01 08:10
 
 こんにちは。

 とりあえず、少し試した限りでは、ファイルはクイックアクセスに追加できないよ
うなので、ファイルに関しては除外するようにしてみました。
 あと、この辺の情報ってほとんど公開されてないので、もしかしたらやり方が違っ
たりするかもしれません。
 1回これで入れ替えて試してみていただけますか?

----- スクリプト内容ここから -----
// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");
var FolderItems = FolderObj.Items();
for (i = 0; i < FolderItems.Count; i++){
 path = FolderItems.Item(i).Path
 if (fso.FileExists(path)){
  continue;
 }
 MenuList.add(i, path);
}
var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}
open(MenuList(ret - 1), 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプト内容ここまで -----

 それでは。

[ ]
RE:09302 Windows 10 のクイックアクセスNo.09303
秀丸担当 さん 21/06/01 09:25
 

陸さん情報ありがとうございます。
そんな方法があるのですね。

GUIDの記述ということで、昔ゴッドモードというのが流行って、もしやそういう書き
方ができないかと思って、フォルダ名を
新しいフォルダー.{679F85CB-0220-4080-B29B-5540CC05AAB6}
というようにしてみたら、クイックアクセスのフォルダになるという裏技が使えてし
まいました。
でも実際は、登録したフォルダはそのフォルダの配下ということになり、ツリー構造
的に実用ではあまり使えないものでした。
陸さんさんのスクリプトのやり方のほうがいいと思います。

[ ]
RE:09302 Windows 10 のクイックアクセスNo.09304
n'Guin さん 21/06/02 08:49
 
陸さん

おはようございます。


> とりあえず、少し試した限りでは、ファイルはクイックアクセスに追加できない
>ようなので、ファイルに関しては除外するようにしてみました。

以前に比べるとだいぶファイルは減りました。 なぜかファイルがふたつ表示されて
います。

もう一点。

リストからフォルダを選択しても、選択したフォルダが開かれません。

自分自身でも、陸さんがお書きくださったスクリプトを解読して、
何が起こっているのかを検討いたします。

ありがとうございました。

[ ]
RE:09303 Windows 10 のクイックアクセスNo.09305
n'Guin さん 21/06/02 14:58
 



>GUIDの記述ということで、昔ゴッドモードというのが流行って、もしやそういう書
>き方ができないかと思って、フォルダ名を
>新しいフォルダー.{679F85CB-0220-4080-B29B-5540CC05AAB6}
>というようにしてみたら、クイックアクセスのフォルダになるという裏技が使えて
>しまいました。
この裏技、思ったより使えます。

陸さんのスクリプトだと、デスクトップ のようなライブラリ表示にならないので、
読み替えが必要になります。

この裏技の方だと、最近使ったファイルもたくさん表示されることにはなりますが、
意外にわかりやすいです。






[ ]
RE:09302 Windows 10 のクイックアクセスNo.09306
n'Guin さん 21/06/02 15:02
 
陸さん、こんにちは。

良い案を示していただき、ありがとうございました。
リストからフォルダを選択しても、選択したフォルダが開かれないのは、MenuList
の番号の問題でした。

また、ファイルの表示はいらないので、fso.FolderExist(path) に直して解決いたし
ました。

これで、思った通りに使えます。 心から感謝申し上げます。


----- スクリプト内容ここから -----

// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");

var FolderItems = FolderObj.Items();

j = 0;
for (i = 0; i < FolderItems.Count; i++){
 path = FolderItems.Item(i).Path
 if (fso.FolderExists(path)){
  MenuList.add(j, path);
  j=j+1;
 }
}

var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}

open(MenuList(ret - 1), 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}

----- スクリプト内容ここまで -----

[ ]
RE:09305 Windows 10 のクイックアクセスNo.09307
n'Guin さん 21/06/02 17:57
 
追伸です。

>陸さんのスクリプトだと、デスクトップ のようなライブラリ表示にならないので、
>読み替えが必要になります。
>
>この裏技の方だと、最近使ったファイルもたくさん表示されることにはなりますが、
>意外にわかりやすいです。
一見良かったのですが、おっしゃるように、不具合もあるようです。

陸さんのスクリプトを改良する方が良さそうです。

[ ]
RE:09302 Windows 10 のクイックアクセスNo.09308
n'Guin さん 21/06/02 18:02
 
やはり、ライブラリ名が表示された方が使用しやすいので、決め打ちで直してみまし
た。 とりあえず、下記のようにしました。

ここでお伺いして良いのかどうかわからないのですが、ライブラリのフォルダ名を取
得することもできそうで、それをやれれば、なお良いと考えました。

参考ページ: https://www.ka-net.org/blog/?p=3782

しかしながら、やり方がわかりません。 参考になるページなどを教えていただけな
いでしょうか。




----
// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

// 決め打ちでフォルダ名を入れてしまう

var FS_Desktop = "C:\\Users\\xxxxxx\\Desktop";
var FS_Download = "C:\\Users\\xxxxxx\\Downloads";
var FS_Documents = "C:\\Users\\xxxxxx\\Documents";
var FS_Photos = "C:\\Users\\xxxxxx\\Pictures";
var FS_Videos = "C:\\Users\\xxxxxx\\Videos";
var FS_Music = "C:\\Users\\xxxxxx\\Music";

var LB_Desktop = "デスクトップ";
var LB_Download = "ダウンロード";
var LB_Documents = "ドキュメント";
var LB_Photos = "ピクチャ";
var LB_Videos = "ビデオ";
var LB_Music = "ミュージック";



strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");


var FolderItems = FolderObj.Items();

j = 0;
for (i = 0; i < FolderItems.Count; i++){
 path = FolderItems.Item(i).Path



 if (fso.FolderExists(path)){

 if (path == FS_Desktop) path = LB_Desktop;
 if (path == FS_Download) path = LB_Download;
 if (path == FS_Documents) path = LB_Documents;
 if (path == FS_Photos) path = LB_Photos;
 if (path == FS_Videos) path = LB_Videos;
 if (path == FS_Music) path = LB_Music;

  MenuList.add(j, path);
  j=j+1;
 }
}

var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}

path = MenuList(ret - 1)

 if (path == LB_Desktop) path = FS_Desktop;
 if (path == LB_Download) path = FS_Download;
 if (path == LB_Documents) path = FS_Documents;
 if (path == LB_Photos) path = FS_Photos;
 if (path == LB_Videos) path = FS_Videos;
 if (path == LB_Music) path = FS_Music;

open(path, 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}


[ ]
RE:09308 Windows 10 のクイックアクセスNo.09309
秀丸担当 さん 21/06/03 08:59
 

パスではなくツリー構造上のフォルダとしての名前の場合、Pathとなっているところ
をNameにすると取得できるようです。
例:
 xxx = FolderItems.Item(i).Name;

参考:
https://docs.microsoft.com/ja-jp/windows/win32/shell/folderitem-name

ちなみにフォルダかどうかの判別は、IsFolderで判別する方法もあるようです。
https://docs.microsoft.com/ja-jp/windows/win32/shell/folderitem-isfolder


[ ]
RE:09309 Windows 10 のクイックアクセスNo.09310
n'Guin さん 21/06/07 10:00
 
秀丸担当さま

返信ありがとうございます。

>パスではなくツリー構造上のフォルダとしての名前の場合、Pathとなっているとこ
>ろをNameにすると取得できるようです。
>例:
> xxx = FolderItems.Item(i).Name;
残念ながら、この手法では取得できませんでした。

いろいろ試行錯誤して、パスを取得できるようになりました。

var FS_Documents = ShellObj.NameSpace(5).Self.Path;

と、.Self.Path  とすることで目的を達成できました。


ありがとうございました。



// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

var LB_Desktop = "デスクトップ";
var LB_Download = "ダウンロード";
var LB_Documents = "ドキュメント";
var LB_Photos = "ピクチャ";
var LB_Videos = "ビデオ";
var LB_Music = "ミュージック";


strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");

var FS_Documents = ShellObj.NameSpace(5).Self.Path;
var FS_Music = ShellObj.NameSpace(13).Self.Path;
var FS_Videos = ShellObj.NameSpace(14).Self.Path;
var FS_Desktop = ShellObj.NameSpace(16).Self.Path;
var FS_User =  ShellObj.NameSpace(40).Self.Path;

// 直接取得できない Downloads と Pictures をユーザーディレクトリから作成
// だめなら、直接指定を。

var FS_Download = FS_User + "\\Downloads";
// var FS_Download = "C:\\Users\\xxxxx\\Downloads";

var FS_Photos =  FS_User + "\\Pictures";
// var FS_Photos = "C:\\Users\\xxxxx\\Pictures";


var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");


var FolderItems = FolderObj.Items();

j = 0;
for (i = 0; i < FolderItems.Count; i++){
 path = FolderItems.Item(i).Path

 if (fso.FolderExists(path)){

 if (path == FS_Desktop) path = LB_Desktop;
 if (path == FS_Download) path = LB_Download;
 if (path == FS_Documents) path = LB_Documents;
 if (path == FS_Photos) path = LB_Photos;
 if (path == FS_Videos) path = LB_Videos;
 if (path == FS_Music) path = LB_Music;

  MenuList.add(j, path);
  j=j+1;
 }
}

var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}

path = MenuList(ret - 1)

 if (path == LB_Desktop) path = FS_Desktop;
 if (path == LB_Download) path = FS_Download;
 if (path == LB_Documents) path = FS_Documents;
 if (path == LB_Photos) path = FS_Photos;
 if (path == LB_Videos) path = FS_Videos;
 if (path == LB_Music) path = FS_Music;

open(path, 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}




[ ]
RE:09302 Windows 10 のクイックアクセスNo.09311
n'Guin さん 21/06/07 10:05
 
陸さん、こんにちは。


陸さんに教えていただいた手法で、無事にクイックアクセスを利用できるようになり
ました。

秀丸担当さまからは、09303 コメント / 秀丸担当 [ 21/06/01 09:25 ] にあるよう
に、陸さんの手法の方が良いとのご意見もあります。

私なりの改良版は、下記に提示しております。 フォルダ名をライブラリ名に置き換
えて、選択できるようになっています。

09310 コメント / n'Guin [ 21/06/07 10:00 ]  

もしよろしければ、マクロライブラリに残しておきたいと思うのですが、いかがでし
ょうか。 クイックアクセスについては、過去に要望もあったようですので。

ご検討のほどをお願いいたします。

[ ]
RE:09311 Windows 10 のクイックアクセスNo.09315
さん 21/06/07 14:10
 
 こんにちは。

 すみません、こちらのメールサーバーがスクリプトを含んだメールを拒否してしま
うようで、流れがちゃんと追えていませんでした。
 一応フォーラムでちゃんと確認したつもりですが、漏れがあればご指摘下さい。

 さて、フォルダの表示名ですが、Nameプロパティで取得できるようです。
 なので、こんな感じにスクリプトを書き換えてみましたが、いかがでしょう。
 よさそうであれば、ライブラリにアップしてみようと思います。

 あと、機能追加として、名前と一緒にフォルダのパスを表示できるようにしました。
 デバッグの都合上、こちらの方が便利だったので。
 パスの表示はなくして、名前の表示だけにしたい場合は、スクリプトの先頭のほう
にある

DisplayFolderPath = 1;



DisplayFolderPath = 0;

に書き換えて下さい。

----- スクリプト内容ここから -----
// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 設定
// メニューにフォルダのパスを表示するかどうか。
// 表示する場合は1、しない場合は0を指定。
DisplayFolderPath = 1;

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var FolderPathList = [];
var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");
var FolderItems = FolderObj.Items();
for (i = 0; i < FolderItems.Count; i++){
 name = FolderItems.Item(i).Name;
 path = FolderItems.Item(i).Path;
 if (!fso.FolderExists(path)){
  continue;
 }
 MenuList.add(i, DisplayFolderPath == 1 ? name+": "+path : name);
 FolderPathList.push(path);
}
var ret = MenuArray(MenuList.Items());
if (ret == 0){
 EndMacro();
}
open(FolderPathList[ret - 1], 1);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプト内容ここまで -----

 それでは。

[ ]
RE:09315 Windows 10 のクイックアクセスNo.09316
n'Guin さん 21/06/07 21:20
 
陸さん、こんばんは


> すみません、こちらのメールサーバーがスクリプトを含んだメールを拒否してし
>まうようで、流れがちゃんと追えていませんでした。

スクリプトがだめとのことで、試した結果をお知らせします。
当方が書いたスクリプトとは、異なる形での表示になる上に、動作が安定しませんで
した。

不具合内容:

1)メニューが出るのに、数秒、運が悪いと数十秒かかります。

2)メニューを選択しても、新しいフォルダが開かれないこともありました。

何か不具合があるように思われました。


[ ]
RE:09315 Windows 10 のクイックアクセスNo.09317
n'Guin さん 21/06/08 08:53
 
陸さん、おはようございます。

再度使ってみて、不具合の追加です。

※ メニューが出るまでに、何回かちらつきます。

取り急ぎ、ご連絡まで。


[ ]
RE:09317 Windows 10 のクイックアクセスNo.09318
秀丸担当 さん 21/06/08 09:37
 

こちらで試してみた限りでは、うまく動作しているようです。
Nameプロパティを使った方式で、名前も出るようでした。
選んだものは正しく選ばれたフォルダになるようです。
n'Guinさんのところで違うというのは、なぜだかわからないです。

異なる形での表示は、DisplayFolderPath = 0;にするといいと思います。
時間がかかったりというのは、もしかしたら
 if (!fso.FolderExists(path)){
を、
 if (!FolderItems.Item(i).IsFolder){
にしたらいいのではないかと考えましたが、こちらでは違いが出ないので、それでい
いのかは判別がつかないですが、試してみるといいかもしれません。

[ ]
RE:09318 Windows 10 のクイックアクセスNo.09319
さん 21/06/08 11:03
 
 こんにちは。

 すみません、こちらではどの減少も再現できませんでした。
 もしかしたら、クイックアクセスに登録している項目数によっては、時間がかかっ
たりするかもしれませんが、こちらでは7つ程度しか登録していないのでわかりませ
んでした。
 あと、メニューを選択しても開かないというのもこちらでもいろいろ調べてみまし
たが、再現しませんでした。
 ただ、項目数が多いとどのみちメニューでは厳しいかもしれないです。
 とりあえず、「CustomFileList」でリスト表示するようにしてみたので、これで試
してみていただけますか?
 ただ、タブ名を変更できなかったので、「検索結果」というタブ名になってしまっ
ていますが。
 あと、いらないコードがいくつか残っていて、あまりきれいではないですが、よさ
そうであれば公開時には削除します。

----- スクリプト内容ここから -----
// 秀丸ファイラーClassic用スクリプト
// 機能:
// クイックアクセスの内容をメニュー表示して、選んだパスを新規タブとして開き
ます。

// 設定
// メニューにフォルダのパスを表示するかどうか。
// 表示する場合は1、しない場合は0を指定。
DisplayFolderPath = 0;

// 変数定義
var MB_OK = 0;
var MB_OKCANCEL = 1;
var MB_STOPRETRYIGNORE = 2;
var MB_YESNOCANCEL = 3;
var MB_YESNO = 4;
var MB_RETRYCANCEL = 5;
var MB_ICONSTOP = 16;
var MB_ICONQUESTION = 32;
var MB_ICONEXCLAMATION = 48;
var MB_ICONINFORMATION = 64;

strWScriptType = typeof( WScript );
if( strWScriptType.toLowerCase() == "object" ) {
 strMsg = "このスクリプトは秀丸ファイラーClassic専用です。\n" +
 "「ブックマークの整理」または「ツールの整理」で「追加」して、パスの右側の
「>>」ボタンの「スクリプトの参照」より、このファイルを指定して登録してくださ
い。\n"+
 "(パスの先頭に「script:」と書かれたパスとして登録)";
 dialog(strMsg, MB_ICONEXCLAMATION, "エラー");
 WScript.Quit();
}

var FolderPathList = [];
var WshShell = new ActiveXObject("WScript.Shell");
save_path = WshShell.ExpandEnvironmentStrings("%temp%\\QuickAccess.txt");
var MenuList = new ActiveXObject("Scripting.Dictionary");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");
var FolderItems = FolderObj.Items();
for (i = 0; i < FolderItems.Count; i++){
 name = FolderItems.Item(i).Name;
 path = FolderItems.Item(i).Path;
 if (!fso.FolderExists(path)){
  continue;
 }
 MenuList.add(i, DisplayFolderPath == 1 ? name+": "+path : name);
 FolderPathList.push(path);
}
s = FolderPathList.join("\r\n");
var file = fso.OpenTextFile(save_path, 2, true, -1);
file.Write(s);
file.Close();
CustomFileList(save_path);

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプト内容ここまで -----

 それでは。

[ ]
RE:09319 Windows 10 のクイックアクセスNo.09320
n'Guin さん 21/06/08 12:56
 
陸さん、お手数をおかけしております。


> もしかしたら、クイックアクセスに登録している項目数によっては、時間がかか
>ったりするかもしれませんが、こちらでは7つ程度しか登録していないのでわかりま
>せんでした。
当方は8つです。



> とりあえず、「CustomFileList」でリスト表示するようにしてみたので、これで
>試してみていただけますか?
今回のは、エラーで止まってしまいました。 
※ 52行目でオブジェクトを指定してください のエラーでした。

なにか当方の環境に問題があるのかもしれません。

私の方は、自分で投稿したスクリプトで目標を達成できました。

陸さんにお手数をおかけし続けるのは心苦しいので、この話題についてはここまでに
させていただければと思います。

どうもありがとうございました。

[ ]
RE:09320 Windows 10 のクイックアクセスNo.09321
さん 21/06/08 13:03
 
 こんにちは。

 52行目でエラーになってしまうということで、「CustomFileList」が利用できない
のだと思います。
 もしかして秀丸ファイラーClassicが1.54より前をお使いではないでしょうか。
 とりあえず、現状の最新版1.60ではエラーにならないと思いますが、いかがでしょ
う。
 もし不都合がないのであれば、最新版へ更新してみていただけないでしょうか。

 それでは。

[ ]
RE:09321 Windows 10 のクイックアクセスNo.09322
n'Guin さん 21/06/08 14:23
 

> もしかして秀丸ファイラーClassicが1.54より前をお使いではないでしょうか。
> とりあえず、現状の最新版1.60ではエラーにならないと思いますが、いかがでし
>ょう。
おっしゃるとおりで、1.52 64bit版を使用しておりました。
最新の 1.62 にいたしました。

うまく動作することを確認しました。
ありがとうございました。

[ ]
RE:09318 Windows 10 のクイックアクセスNo.09323
n'Guin さん 21/06/08 22:47
 
>
>こちらで試してみた限りでは、うまく動作しているようです。
>Nameプロパティを使った方式で、名前も出るようでした。
>選んだものは正しく選ばれたフォルダになるようです。
>n'Guinさんのところで違うというのは、なぜだかわからないです。
>
>異なる形での表示は、DisplayFolderPath = 0;にするといいと思います。
>時間がかかったりというのは、もしかしたら
> if (!fso.FolderExists(path)){
>を、
> if (!FolderItems.Item(i).IsFolder){
>にしたらいいのではないかと考えましたが、こちらでは違いが出ないので、それで
>いいのかは判別がつかないですが、試してみるといいかもしれません
無駄な返信は意味がないので、止めてください。 迷惑です。


当方がこのスレッド書き込んだスクリプトをみていただければ、上記の指摘が的はず
れなのはご理解いただけるかと。

秀丸担当さまの書き込みを放置しようと思っていましたが、放置すると当方の理解不
足のようにスレッドが終わることになるので、あえて書きこませていただきます。


[ ]
RE:09323 Windows 10 のクイックアクセスNo.09324
秀丸担当 さん 21/06/09 10:42
 

誤解や、表現などに問題があったとしたら申し訳ありません。

改めて読み返してみまして、無意味や的ずれなコメントではなかったと思うのですが、
n'Guinさんに落ち度があるかのように思わせてしまったのならすみません。

意味のあるコメントをしたつもりですが、迷惑だからやめてくださいとまで言われる
と、さすがに非常に悲しいです。

[ ]
RE:09324 Windows 10 のクイックアクセスNo.09325
n'Guin さん 21/06/09 23:03
 
秀丸担当さま

ご理解いただけなかったようなので、経緯を書き記します。

1)09308 コメント / n'Guin [ 21/06/02 18:02 ]  での書き込み

ライブラリのパス名を取得できる可能性があるページとして、下記参考ページをあげ
ました。
参考ページ: https://www.ka-net.org/blog/?p=3782

スクリプトでいうと下記のようになります。           
var ShellObj = new ActiveXObject("Shell.Application");
var FS_Documents = ShellObj.NameSpace(5)

※ 参考ページによれば、My Documents を取得できる。

2) 09309 コメント / 秀丸担当 [ 21/06/03 08:59 ]  様からの書き込み

 xxx = FolderItems.Item(i).Name;

でパス名を取得できるとのこと。

よって、スクリプトを

var FS_Documents = ShellObj.NameSpace(5).Name

としてみる。

----- 以下のスクリプトを試してみてください。
var ShellObj = new ActiveXObject("Shell.Application");

var FS_Documents = ShellObj.NameSpace(5);
dialog (FS_Documents, 64, "ShellObj.NameSpace(5)");

var FS_Documents = ShellObj.NameSpace(5).Name;
dialog (FS_Documents, 64, "ShellObj.NameSpace(5).Name");


function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプトはここまで。

3) 09310 コメント / n'Guin [ 21/06/07 10:00 ]

秀丸担当さまの2)への返信に対して、

var FS_Documents = ShellObj.NameSpace(5).Self.Path;

で、1)の書き込みの目的が果たせることを示した。

4)09318 コメント / 秀丸担当 [ 21/06/08 09:37 ]

3)にたいする返信で、

var FS_Documents = ShellObj.NameSpace(5).Name
でうまく取得できるとの書き込み。 

IsForder のほうが、ExistFolder に変えてみてはという提案
「こちらでは違いが出ないので、それでいいのかは判別がつかないですが、試してみ
るといいかもしれません。」 とのこと。 

当方としては、どんな根拠で試してみてはといわれているのかわかりません。


----- 以下のスクリプトを試してみてください。
var ShellObj = new ActiveXObject("Shell.Application");

var FS_Documents = ShellObj.NameSpace(5);
dialog (FS_Documents, 64, "ShellObj.NameSpace(5)");

var FS_Documents = ShellObj.NameSpace(5).Name;
dialog (FS_Documents, 64, "ShellObj.NameSpace(5).Name");

var FS_Documents = ShellObj.NameSpace(5).Self.Path;
dialog (FS_Documents, 64, "ShellObj.NameSpace(5).Self.Path");


function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----- スクリプトはここまで。

> 意味のあるコメントをしたつもりですが、迷惑だからやめてくださいとまで言われ
>ると、さすがに非常に悲しいです。

すこし言い過ぎたかもしれません。すみませんが、上記の経緯をご理解いただければ
と存じます。 当方も非常に悲しいです。






[ ]
RE:09325 Windows 10 のクイックアクセスNo.09327
秀丸担当 さん 21/06/10 13:36
 

いろいろありますが、経緯としてあった点についてだけ簡略に書かせていただきます。
誤りなどを指摘する格好になってしまいますが、やむを得ないので、ご了承ください。

Nameの件は、パス(例えば「C:\Users\(user)\Documents」)ではなく、フォルダ名
(例えば「ドキュメント」)を取得することが目的だったと思っています。
それで、FolderItems.Item(i).Pathの代わりに、FolderItems.Item(i).Nameを使うと
いいということです。

例:
----------
var ShellObj = new ActiveXObject("Shell.Application");
var FolderObj = ShellObj.NameSpace("shell:::{679F85CB-0220-4080-B29B-5540CC0
5AAB6}");
var FolderItems = FolderObj.Items();
for (i = 0; i < FolderItems.Count; i++){
 dialog(
  "Path : "+FolderItems.Item(i).Path+"\n"+
  "Name : "+FolderItems.Item(i).Name+"\n"
  , 64, "" );
}

function dialog(body, flg, title){
 var WshShell = new ActiveXObject("WScript.Shell");
 var stat = WshShell.Popup(body, 0, title, flg);
 return stat;
}
----------

ShellObj.NameSpace(5).Nameという書き方を試されたのは知りませんでしたが、この
場合は、ShellObj.NameSpace(5).Self.Nameとすると得られるようです。


IsFolderの件は、項目がフォルダかどうかを知ることが目的と思っています。
FolderExistsは、パスとしての文字列(例:「C:\xxx\yyy\zzz」)が、フォルダとし
て存在するかどうかを判別します。
FolderExistsの中身はおそらく、Cドライブを調べて、xxxを調べて、yyyを調べて、z
zzを調べる、といった感じだろうと想像します。
IsFolderは、項目は既に得られていて、フォルダかどうかの情報を返すだけなので、
パスのように調べていないのだろうと想像します。
いずれもWindowsが提供するオブジェクトなので、実際何をしているのかはわからな
いです。
結果は同じでも中身は違うと思うので、遅い問題があって、その違いを見るために試
してみる価値はあったと思います。

これは中身を想像しやすいのでまだいいほうですが、仮に中身が想像できなくても違
う手法を試してみることはよくあります。


このコメントに対するコメントはしていただかなくても大丈夫です。
もし引き続き何かご意見がありましたら、"taki@maruo.co.jp"まで連絡いただければ
幸いです。

[ ]
RE:09327 Windows 10 のクイックアクセスNo.09329
n'Guin さん 21/06/10 14:22
 
秀丸担当様

返信ありがとうございます。

>Nameの件は、パス(例えば「C:\Users\(user)\Documents」)ではなく、フォルダ名
>(例えば「ドキュメント」)を取得することが目的だったと思っています。

ここに誤解があったと言うことです。

ご返信いただいたことに感謝いたします。

[ ]
RE:09322 Windows 10 のクイックアクセスNo.09331
さん 21/06/11 09:11
 
 こんにちは。

 最新版に更新してうまく動いたとのことでよかったです。
 とりあえず、ライブラリに公開申請を出しておいたので、そのうち公開されると思
います。

 それでは。

[ ]
RE:09331 Windows 10 のクイックアクセスNo.09332
秀まるお さん 21/06/11 09:47
 
 アップロードいただいたファイルですが、僕の所ではうまく解凍できないようでし
た。

 Lhaplusでもダメで、Explzhでもダメでした。

 とりあえずまだ公開しないでおいてます。

 何か別の圧縮ソフトで圧縮するかしてみてほしいです。

[ ]
RE:09332 Windows 10 のクイックアクセスNo.09334
さん 21/06/11 11:32
 
 こんにちは。

 すみません、テストで圧縮ソフトの設定を変えていたのですが、戻すのを忘れてい
ました。
 先ほど、削除して際アップロードしましたので、再度確認いただけますと幸いです。
 お手数をおかけして申し訳ありません。

 それでは。

[ ]
RE:09334 Windows 10 のクイックアクセスNo.09338
秀まるお さん 21/06/11 15:42
 
 登録完了しました。

[ ]