スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 

Fire File Copyとの連携(Tablacus Explorer)

今回のアドオンはFire File Copyとの連携するアドオンです。
同種のソフトFastCopyの場合は複数の項目を渡すのにWM_DROPFILESが使えたのですが、FFCは対応していません。
それで、X-Finderの場合はOLEドラッグ&ドロップをエミュレートして渡していたのですが、今回は右ボタンドロップのシェル拡張メニューを利用する方法を使っています。
このようにコマンドライン以外の方法を使っているのはコマンドラインでは長さ制限があるために沢山の項目を渡すことができないためです。

■File File Copyアドオンのオプション設定
パスはシェル拡張している場合は何でもOKです。シェル拡張していない場合はシェル拡張のdllを指定して下さい。32bit環境の場合はffc_shell.dllを64bit環境や両方使う場合がある場合はffc_shell_64.dllをフルパスで指定します。
ClassはFire File CopyのクラスIDを指定します。既定の設定でOKです。FastCopyなど別のソフトを使いたい場合は参照からシェル拡張のソフトを選びます。
Copyはコピーの際のコマンドIDを指定します。Fire File Copyの場合は1です。
Moveは移動の際のコマンドIDを指定します。Fire File Copyの場合は2です。

他のソフトとフレキシブルに連携できるのがファイラーの醍醐味ですね。

Fire File Copy
 
スポンサーサイト

ダイアログでフォルダも選択できるように(Tablacus Explorer)

今回のTablacus Explorer 13.12.22の更新ではダイアログでフォルダも選択できるようにしました。
今まではSHBrowseForFolderでのフォルダ選択がちょっと苦手なので、ポップアップメニューで選択するようにしていました。
Vista以降であれば、フォルダの選択をするのにIFileOpenDialogでオプションにFOS_PICKFOLDERSを使う方法もありますが、今回はXPでも使えて、フォルダもファイルも両方選択できるように、GetOpenFileNameでOFN_ENABLEHOOKでのフックとSetWindowsHookExのWH_CALLWNDPROCのフックを組み合わせてみました。

詳しくはTablacus Exploerのソースをご覧ください。
 

アイコンの変更(Tablacus Explorerアドオン)

Tablacus Explorerの新しいアドオン、「アイコンの変更」を使うとフォルダや未定義のファイル、ショーットカットや共有や任意の拡張子のアイコンを好きな物に差し替えることができます。

「Folder closed」は閉じたフォルダ、「Folder opened」は開いたフォルダ、「Undefined」は未定義ファイル、「Shortcut」はショートカット、「Share」は共有ファイルのアイコンになります。
任意の拡張子を差し替えたい場合はタイプに「*.txt」等と入力して「追加」を押します。(※1)

「Folder closed」等をダブルクリックもしくはクリックして編集ボタンを押して編集します。

Windows Vista/7/8/8.1の場合は
Smallが詳細、一覧等の小さいアイコン
SysSmallがフォルダツリーのアイコン
ExtraLargeが中アイコン、並べて表示等のアイコンになります。

Windows XPの場合は
Smallが詳細、一覧等の小さいアイコンとフォルダツリーのアイコン
Largeが大きいアイコン
ExtraLargeが縮小版、並べて表示等のアイコンになります。

「参照...」を押して「ico」アイコンファイルや「png」等の画像ファイルを選びます。画像ファイルの場合、丁度でなくてもリサイズします。
参照で選んだら、「置換」を押して差し替えます。

すべて、決まったらOKを押します。アイコンを最初の状態に戻す場合は「アイコンの変更」を無効化してTablacus Explorerを再起動する必要があります。

(※1) X-Finderと違ってイメージリストを直接差し替える方法なので、定義されていない拡張子のアイコンを追加することはできません。

Icon Changer

 

ホイールクリックで新しいタブを開く(Tablacus Explorer)

現在、Tablacus Explorerではリスト上でホイールクリックすると選択の切り替えを行うようになっています。これを多くのタブブラウザと同じように新しいタブを開くようにする場合は、ツール→アドオン→マウスの「オプション...」→リスト→3を変更します。
参考:Tablacus Explorer マウスのカスタマイズ方法

次のバージョンからホイールクリックで新しいタブを開くようにしようかな。

タイプ
JScript

オプション
var item = Ctrl.Items.Item(Ctrl.HitTest(pt, LVHT_ONITEM));
Ctrl.Navigate(item && item.IsFolder ? item : HOME_PATH ? HOME_PATH : Ctrl, SBSP_NEWBROWSER);

ホイールクリックで新しいタブを開く
 

IContextMenuにIShellBrowserを関連付ける

カスペルスキー対策でコンテキストメニューを調べている時にEternalWindowsを読んでいたら、IContextMenuにIShellBrowserを関連付ける方法が載ってました。

今までのTablacus Explorerでは右クリックから「名前の変更」が選ばれた場合は、Tablacus Explorer側で名前の変更を呼び出すようにしていたのですが、IContextMenuにIShellBrowserを関連付ければ自動的に名前の変更が行われるようになりました。

フォルダなどの新規作成も◎

参考にしたのは

EternalWindows / シェル拡張 / UIオブジェクトの実装

IObjectWithSite::SetSiteということなのでTablacus Explorerでは、IContextMenuにIUnknown_SetSiteでIShellBrowserに関連したIServiceProviderを渡しています。

IServiceProviderのQueryServiceが呼ばれた際は、IShellViewのQueryInterfaceで取得した値を渡せばOKでした。

Tablacus ExplorerではIServiceProviderをIExplorerBrowserのフィルターでも使っているのですが、こちらはIShellViewのQueryInterfaceで取得した値を渡すとIExplorerBrowserの動作にいろいろと不具合が出るので、IExplorerBrowserにIUnknown_SetSiteで渡すIServiceProviderはIShellViewのQueryInterfaceの値を渡さないようにしています。

詳しくはTablacus Exploerのソースをご覧ください。

上記の「名前の変更」の場合にはWindows 7ではIID_IFolderView2がWindows XPではIID_IDefViewFrame3でQueryServiceが呼ばれました。IID_IDefViewFrame3って何だ?

それから、カスペルスキーの方ですが、テクニカルサポートにKaspersky Internet Security 2014のシステム上の問題のシステム遅延という事で問い合わせたら、詳細を確認してくれると解答を頂いています。
 

カスペルスキーの問題

カスペルスキーアンチウイルスを使っているとX-Finderのコンテキストメニューやダブルクリックが遅くなると連絡を貰っていたので、確認のためにWindows XP SP3にKaspersky 2014体験版をインストールしてみました。

報告された方の環境はWindows 8(64ビット)だったので、Windows 8.1 Preview版(64ビット)でテストしようと思ったのですがインストールできなかったので、Windows XP SP3でテストすることに…

テストしてみたら、X-FinderどころかTCM32.exeでもメニューを開くまでに5秒以上掛かってしまいます。
拡張子が「.exe」等のファイルは大丈夫ですが、「.txt」等では遅くなるようです。
カスペルスキーのシステムウォッチャーを無効にすると遅延は解消されます。

調査のためにVisual C++でWin32の新規プロジェクトを作って以下のコンテキストメニューを作る部分を入れてみました。

QueryContextMenuの行で5秒以上掛かってしまいました。


::CoInitialize(NULL);
LPITEMIDLIST pidlFull = ::ILCreateFromPath(L"C:\\readme.txt");
IShellFolder *pSF = NULL;
LPCITEMIDLIST pidlChild = NULL;
SHBindToParent(pidlFull, IID_PPV_ARGS(&pSF), &pidlChild);
IContextMenu *pCM = NULL;
pSF->GetUIObjectOf(NULL, 1, &pidlChild, IID_IContextMenu, NULL, (LPVOID*)&pCM);
HMENU hMenu = CreatePopupMenu();
pCM->QueryContextMenu(hMenu, 0, 1, 0x7fff, CMF_DEFAULTONLY);
DestroyMenu(hMenu);
pCM->Release();
pSF->Release();
::CoTaskMemFree(pidlFull);
::OleUninitialize();

これで引っかかってしまうのであれば、カスペルスキー側の問題!?

こちら側の調整でなんとかなるものなのだろうか...
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。