スポンサーサイト

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

わかりにくいアドオン・その1(マルチスレッド、マルチタスク等)(Tablacus Explorer)

Tablacus Explorerのアドオンのマルチスレッド、マルチタスク、FastCopy、Fire Fire Copyはコピー中等にTablacus Explorerで他の作業ができなくなる問題をマルチスレッドやマルチタスク等を使って解消する為のものです。

これらのアドオンは一緒にインストールしてもほとんど意味がありません。基本的にはどれか1つをインストールして下さい。よくわからない場合は「マルチスレッド」がオススメです。

■これらのアドオンをインストールしない場合

☆メリット
コピー後にコピーしたファイルが選択された状態になる。
「元に戻す」ができる

★デメリット
コピー中等にTablacus Explorerでは他の作業ができなくなる

■マルチスレッド

Tablacus Explorer内にスレッドを作ってそこでコピー等を行う

☆メリット
他のアドオンに比べて、新しいプロセスを作らないので開始する際の処理が軽い
「元に戻す」ができる

★デメリット
コピー中等にTablacus Explorerが落ちると一緒に落ちる

■マルチプロセス

TCM32.exeかTCM64.exeでコピー等を行う

☆メリット
「元に戻す」ができる

■FastCopy

FastCopyでコピー等を行う

☆メリット
FastCopyがOSのキャッシュを全く使わないため、他のプロセスが重くなりにくい
デバイスの限界に近いパフォーマンスが出る

★デメリット
「元に戻す」ができない

■Fire File Copy

Fire File Copyでコピー等を行う

☆メリット
高速に、しかもガリガリという音を立てずに行える

★デメリット
「元に戻す」ができない
削除には対応していない(他のアドオンと組み合わせて削除を他のアドオンで行うことは可能)
 
スポンサーサイト

メニューを調整しました。(Tablacus Explorer)

前のバージョンまでは、XPやクラシックテーマの場合はTablacus Explorerで追加したメニューアイコンの前だけスペースが開いていました。
これはオーナードローを使っていないので仕方ないことだと思っていました。
しかし、EternalWindowsビットマップメニュー を読んでいたら、解決方法がありました。
実はオーナードローも試していたのですが、ビジュアルスタイルと相性が悪いのでこの方法で解決できて良かったです。
 

タイプを追加しました。(Tablacus Explorer)

タイプのキーの設定昨日の更新で実行時のタイプに「RunAs」と「キー」を追加しました。
「RunAs」は管理者として実行(Vista/7/8)・別のユーザーとして実行(XP)になります。

「キー」はキー入力をエミュレートします。キーの入力はSendKeysと同じで「A」等の普通のキーはそのまま入力、特殊キーは「{」と「}」の括弧で囲みます。HOMEキーなら{HOME}となります。

詳しくは以下で
http://msdn.microsoft.com/ja-jp/library/cc364423.aspx
 

結果フォルダに対応しました。(Tablacus Explorer)

今回のTablacus Explorerでは結果フォルダに対応しました。
結果フォルダとはX-Finderのクリップフォルダの様に一つの階層にいろいろなファイルやフォルダをまとめる機能です。
クリップフォルダのアドオンは後日にアップする予定です。とりあえず、スピードダイヤルをショートカットを作る方法から結果フォルダに変更してみました。

それから、Windows 7のコントロールパネルの不具合を調整しました。
コントロールパネルの項目を開くとTablacus Explorerの中で妙に開いてしまう問題と、64ビットWindowsで32ビット版Tablacus Explorerでコントロールパネルの64ビットの項目を開くと落ちてしまう問題を調整しました。

結果フォルダはWindows Vistaから追加された機能なのですが、XPの場合は検索結果のフォルダを同じように使っています。
Vista以降ではIExplorerBrowserからだけでなくIShellBrowserからも使いたかったので、「shell:::{2965E715-EB66-4719-B53F-1672673BBEFA}」で結果フォルダを開いています。「shell::」無しでは開けません。
XPの場合は「::{e17d4fc0-5564-11d1-83f2-00a0c90dc849}」で検索結果を開いています。
XPでは結果フォルダのインターフェイスIResultsFolder::AddIDListは使えませんが、代わりにIShellFolderView::AddObjectを使いました。
IResultsFolder::AddIDListで追加するItemIDListはフルパスですが、IShellFolderView::AddObjectの場合のItemIDListを取得する方法を見つけられなかったので、検索結果のItemIDListを調べてフルパスのItemIDListから検索結果に追加できるItemIDListを作成する方法を見つけました。ファイル名のItemIDの後ろにパスのItemIDListを繋げた様な感じでした。詳しくは以下のteILCreateResultsXPで!
もうXPのサポートも一ヶ月位ですがXPで結果フォルダを使いたい場合は使って下さい。

LPITEMIDLIST teILCreateResultsXP(LPITEMIDLIST pidl)
{
 LPITEMIDLIST pidl2 = NULL;
 LPCITEMIDLIST pidlLast;
 IShellFolder *pSF;
 if SUCCEEDED(SHBindToParent(pidl, IID_PPV_ARGS(&pSF), &pidlLast)) {
  SFGAOF sfAttr = SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR | SFGAO_STORAGE | SFGAO_STREAM;
  if (SUCCEEDED(pSF->GetAttributesOf(1, &pidlLast, &sfAttr)) &&
   (sfAttr & (SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR | SFGAO_STORAGE | SFGAO_STREAM))) {
   UINT uSize = ILGetSize(pidl) + 28;
   pidl2 = (LPITEMIDLIST)::CoTaskMemAlloc(uSize + sizeof(USHORT));
   ::ZeroMemory(pidl2, uSize + sizeof(USHORT));

   UINT uSize2 = ILGetSize(pidlLast);
   ::CopyMemory(pidl2, pidlLast, uSize2);
   *(PUSHORT)pidl2 = uSize - 2;
   UINT uSize3 = uSize - uSize2 - 28;
   PBYTE p = (PBYTE)pidl2;
   *(PUSHORT)&p[uSize2 - 2] = uSize3 + 28;
   *(PDWORD)&p[uSize2 + 2] = 0xbeef0005;
   ::CopyMemory(&p[uSize2 + 22], pidl, uSize3);
   *(PUSHORT)&p[uSize - 4] = uSize2 - 2;
   CLSID clsid;
   IPersist *pPersist;
   if SUCCEEDED(pSF->QueryInterface(IID_PPV_ARGS(&pPersist))) {
    if SUCCEEDED(pPersist->GetClassID(&clsid)) {
     if (IsEqualCLSID(clsid, CLSID_ShellFSFolder)) {
      *(PUSHORT)&p[uSize2 + 24 + uSize3] = *(PUSHORT)&p[uSize2 - 4];
     }
    }
    pPersist->Release();
   }
   STRRET strret;
   if SUCCEEDED(pSF->GetDisplayNameOf(pidl2, SHGDN_NORMAL, &strret)) {
    if (strret.uType == STRRET_WSTR) {
     ::CoTaskMemFree(strret.pOleStr);
    }
   }
   else {
    ::teCoTaskMemFree(pidl2);
    pidl2 = NULL;
   }
  }
  pSF->Release();
 }
 return pidl2;
}

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