タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

ちょっとしたスクリプト - Tablacus Explorer

某所で要望のあったスクリプトを3つ書いてみました。

・フォルダ構成のみクリップボードにコピー

var CreateFolderOnly2 = function (path, dest, Items, nAdd)
{
  api.SetWindowText(te.hwnd, path);
  CreateFolder(dest);
  if (nAdd == 0) {
    Items.AddItem(dest);
  }
  var wfd = api.Memory("WIN32_FIND_DATA");
  var hFind = api.FindFirstFile(path + "\\*", wfd);
  var bFind = hFind != INVALID_HANDLE_VALUE;
  while (bFind) {
    if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
      var fn = wfd.cFileName;
      if (fn != "." && fn != "..") {
        CreateFolderOnly2(fso.BuildPath(path, fn), fso.BuildPath(dest, fn), Items, nAdd - 1);
      }
    }
    bFind = api.FindNextFile(hFind, wfd);
  }
  api.FindClose(hFind);
};

var CreateFolderOnly = function (Item, Items, temp, nAdd)
{
  var path = api.GetDisplayNameOf(Item, SHGDN_FORPARSING);
  if (/^[A-Z]:\\|^\\/i.test(path)) {
    var fn = fso.GetFileName(path);
    if (fn && fso.FolderExists(path)) {
      var dest = fso.BuildPath(temp, fn);
      CreateFolderOnly2(path, dest, Items, nAdd);
    }
  }
};

var title = api.GetWindowText(te.hwnd);
var temp = fso.BuildPath(fso.GetSpecialFolder(2).Path, "tablacus");
if (!IsExists(temp)) {
  CreateFolder(temp);
}
temp += "\\folder";
DeleteItem(temp);
CreateFolder(temp);

var FV = GetFolderView(Ctrl, pt);
var Items = te.FolderItems();
var Selected = FV.SelectedItems();
if (Selected) {
  for (var i = 0; i < Selected.Count; i++) {
    CreateFolderOnly(Selected.Item(i), Items, temp, 0);
  }
}
if (Items.Count == 0) {
  CreateFolderOnly(FV, Items, temp, 1);
}
api.OleSetClipboard(Items);
api.SetWindowText(te.hwnd, title);

f:id:tablacus:20150714222903p:plain

長いしフォルダがたくさんあると時間が掛るので、WSHにするとか、アドオンにしてマルチプロセスにする方が良さそうな感じですが…

 

1階層上に送る

var FV = GetFolderView(Ctrl, pt);
var Selected = FV.SelectedItems();
if (Selected) {
    var oDest = sha.NameSpace(fso.GetParentFolderName(api.GetDisplayNameOf(FV, SHGDN_FORPARSING)));
    if (oDest) {
        oDest.MoveHere(Selected, FOF_ALLOWUNDO);
    }
}

f:id:tablacus:20150714223605p:plain

 

・1階層下から吸い出す

 

var FV = GetFolderView(Ctrl, pt);
var path = OpenDialog(fso.GetParentFolderName(api.GetDisplayNameOf(FV, SHGDN_FORPARSING)));
if (path) {
    FV.Folder.MoveHere(path, FOF_ALLOWUNDO);
}

f:id:tablacus:20150714224256p:plain

ラベル グループ - Tablacus Explorer

ラベル グループは予めグループで登録しておいたラベルを管理できるようにするアドオンです。

f:id:tablacus:20150629222231p:plain

例えば、こんな感じで「時間」と「場所」のグループを作っておくと…

f:id:tablacus:20150629222407p:plain

追加するラベルや表示するラベルを時間や場所でグループしたラベルで管理できます。

f:id:tablacus:20150629222524p:plain

それと、ラベルのメニューの「詳細」は詳細表示の際にまだ「ラベル」カラムを表示していない場合、「ラベル」カラムを表示させるメニューです。

混在ソート、総ファイルサイズ ソートの実現方法 - Tablacus Explorer

混在ソートと総ファイルサイズ ソートのアドオンを作成しました。
X-Finderの場合は自分でファイルやフォルダの一覧を管理しているので、項目の順序を好きな順にすることは、そう難しいことではありません。
しかし、Tablacus Explorerの場合は中でエクスプローラを動かしている様なものなので、今までその順序を変更する方法が分かっていませんでした。
エクスプローラと同じという動作はそのままなので楽ですが、違うことをしようとすると困難になります。

そして、試行錯誤してやっと順序を入れ替える方法を見つけました。
という訳で今回はどういう方法で実現したかをブログに書きます。

基本的には IShellView2::SelectAndPositionItem で 指定する項目のPOINTを先頭の項目の位置に設定するとその項目が最初の項目になります。

しかし、うまく動かすには以下の設定を行う必要がありました。

1.表示モードは「詳細」「一覧」以外にする
詳細、一覧の場合は並べ替えの際に別の表示にして元に戻せばOK
Tablacus Explorerの場合は「詳細」「一覧」の場合は一時的に「並べて表示」にしているのでソートの際に「並べて表示」がちょっと見えます。(※描画を一時停止して見えなくしました)

2.FolderFlagsのFWF_AUTOARRANGEをオンにする。
これも並べ替えの前にIShellView2::SetCurrentFolderFlagsでFWF_AUTOARRANGEをオンにして元に戻せばOK

3.グループで表示は「なし」にする
グループ表示をしているとうまく動きません。

4.FolderViewOptionsのFVO_VISTALAYOUTをオンにする
IExplorerBrowser::SetFolderViewOptionsで設定するFVO_VISTALAYOUTもオンじゃないと動きません。しかもこの設定FolderViewOptionsはフォルダの移動前に設定しないと効果が出ないので注意です。同じフォルダを指定して IExplorerBrowser::BrowseToObject や IExplorerBrowser::BrowseToObject を実行してもまだ設定が切り替わりません。

5.Windows Vista以降
上記の設定を行ってもWindows XPではうまく動きませんでした。

子階層(サブメニュー)の作り方 - Tablacus Explorer

ファイル、お気に入り、コンテキスト メニュー等のメニューやツール バーやリンク バー等での2段階メニューの子階層の作り方

メニューでもバーでもタイプを「メニュー」にしてオプションを「開く」にするとメニューの「閉じる」までが子階層(サブメニュー)になります。

 

お気に入りの設定で以下の様にタイプを「メニュー」にしてオプションを「開く」にすると…(タイプを「メニュー」にして「参照...」を押すとメニューが出るので「開く」を選ぶ)

f:id:tablacus:20150604223422p:plain

こんな感じでサブメニューが作れます。

f:id:tablacus:20150604223524p:plain

 

リンクバーも同様にタイプを「メニュー」にしてオプションを「開く」にすると…

f:id:tablacus:20150604223406p:plain

第1階層がボタンに第2階層以下がメニューになります。

f:id:tablacus:20150604223718p:plain

サイズ形式のカスタマイズ - Tablacus Explorer

Tablacus Explorer 15.5.17でサイズ形式のカスタマイズを追加しました。

f:id:tablacus:20150518002716p:plain

オプションの「一覧」のサイズで指定します。

「既定」は従来通りでWindows Vista以降では詳細でKB固定、並べて表示では自動になります。

「自動」はサイズによって単位を自動的に付けます。

「123」は数字だけで表します。

「KB」は単位がKBで固定です。

「MB」は単位がMBで固定です。

「GB」は単位がGBで固定です。

エクスプローラブラウザ(詳細・並べて表示)にチェックが入っている場合は既定の表示になります。

f:id:tablacus:20150518003438p:plain

「高度」を押すと詳細な設定を行えます。

「既定」が「0」

「自動」が「2」

「123」が「3」

「KB」が「1」

「MB」が「0x22」

「GB」が「0x32」

になります。いきなりMBから「0x○○」になっていますが、これは前の数字が単位、後ろの数字が小数点以下の桁数になります。

単位は「1」が「KB」、「2」が「MB」、「3」が「GB」、「4」が「TB」、「5」が「P」、「6」が「E」になります。(さすがに後半のは大きすぎて実際のテストはできていませんが…)

例えば、「0x12」とすれば、「465.26 KB」みたいにKB固定で小数点以下の数字が2桁になります。

この値はフォルダ設定でも「Ctrl.SizeFormat = 0x12;」等として設定することができます。

f:id:tablacus:20150518005001p:plain

あと、「自動」と「KB」と「その他」では使用しているAPIの関係で端数処理が異なります。

「自動」は「切り捨て」、「KB」は「切り上げ」、その他の場合は「四捨五入」になります。

「1」と「0x10」は両方共KB固定で少数なしですが、表示が微妙に異なることがあります。

同様に「1」と「0x11」で、表示がKBになる場合も表示が微妙に異なることがあります。

ご意見募集 - Tablacus Explorer

今後、実装できそうなんだけど、どういう仕様にするか悩んでいる機能があります。
そういう訳でユーザーの皆様のご意見を募集したいと思います。
ご意見を総合して、拡張性の高い方法にするか、決め打ちでパフォーマンスの良い方法にするか、実装しないかを考えます。


1.リスト(ツリー)の文字色
* 読み込み専用やシステム、ディレクトリなどのファイルの属性で色を変える
* 拡張子で色を変える
* ファイル名に含まれる文字で色を変える
* その他

あと、色だけでなく太字イタリックなどの文字修飾が必要かどうか?

Tablacus Explorer 15.5.12で拡張性の高い方法で実装しました。

5月14日現在は拡張子で色を変えるアドオンのみ完成しています。

他のアドオンは要望が多そうであれば…※2015年5月14日追記


2.バイトサイズの表記
KB以外にどんな表記が欲しいのか

* バイト表記 1,404 / 1,778,176
* 自動 1.37 KB / 1.69 MB
* MB 固定 0.00 MB / 1.70 MB
* その他

今の所、決め打ちでパフォーマンス重視の実装の予定です。

システム依存、バイト表示、自動表記、KB固定、MB固定、GB固定をリスト毎に切り替えられるようになる感じです。

裏ワザでKB、MB、GB固定の場合は小数点以下の桁数を指定できるようにします。

※2015年5月14日追記

 

ここのコメントでもGitHubでもメールでも某巨大掲示板でも良いです。
※たまに見逃すことがあったりしますが、その場合はすみません。

タブカラープラス - Tablacus Explorer

タブカラープラスは決まったタブの色を指定するアドオンです。

例えば、ネットワークフォルダのタブの色を水色にしたり、Everythingのタブの色をオレンジにしたりできます。

ツール→アドオンでタブカラープラスのオプションを開いて

f:id:tablacus:20150504231528p:plain

ネットワークフォルダのタブの色を指定する場合は左端の入力ボックス「フィルタ」に

\\*

 と入力し、右端のボタンを押して色を決めます。

※フォントの関係で円マーク(¥)がバックスラッシュ(\)になっています。

Everythingの場合は「フィルタ」を

es:*

 と入力し、右端のボタンを押して色を決めます。

 ※タブに色を付けるのにはタブプラスが必要です。

f:id:tablacus:20150504232053p:plain

正規表現を使う場合は先頭を「/」にします。

ネットワークフォルダ

/^\\/

Everythingは

/^es:/i

になります。

f:id:tablacus:20150504232129p:plain