カラム拡張DLLの表示高速化No.09565
R さん 21/10/11 03:26
 
ソフトウェアの主な特徴欄にあるカラム拡張DLL、便利に使わせて頂いております。

https://hide.maruo.co.jp/software/hmfilerclassic/index.html
> Windows Vista以降廃止されたカラム拡張DLLも表示できます。

フォルダのDesktop.iniの.ShellClassInfo>InfoTipのテキストを表示するというシン
プルなDLLを自作して使っています。
表示イメージは以下の通りで、IntoTipというカラムが自作のもになります。
https://i.imgur.com/5cnfKyo.png


カラムの表示が容量の表示に引っ張られてしまっているようなのですが、容量カラム
を待たないようにして頂けますでしょうか?

このフォルダを表示する時、以下のような順番で表示されます。
- フォルダ一覧(01.aaa、02.bbb、03.ccc)が表示される
- 少し待つ
- フォルダ 01.aaa の容量&IntTipカラムが表示される
- 少し待つ
- フォルダ 02.bbb の容量&IntTipカラムが表示される
- 少し待つ
- フォルダ 03.ccc の容量&IntTipカラムが表示される

フォルダの容量は計算するのに多少の時間がかかるのは避けられないと思いますが、
IntoTipの表示処理は待たずに表示するようにして頂きたいです。
平たく言えば、カラムごとに別スレッドにして欲しい もしくは、容量は独立したス
レッドにして欲しいです。

宜しくお願いいたします。

[ ]
RE:09565 カラム拡張DLLの表示高速化No.09569
秀丸担当 さん 21/10/11 13:23
 

カラム拡張DLLを作成されたというのはすごいですね。
フォルダサイズ表示があると、確かにそれと一緒に遅延されてしまいました。
一応処理自体は別スレッドなのですが、遅いカラムなどもまとめて一緒になっていま
す。
フォルダサイズだけで個別にすることは不可能ではないと思いますが、だいぶん作り
替える必要があって、安定性を考えると簡単ではないかもしれません。

以下はちょっと公式にサポートしているとは言い難い内容です。
内部的に遅い扱いにして遅延させているものと、速い扱いにしてすぐ表示させるもの
に分けていて、拡張DLLは全部遅い扱いになっています。
例外的に、特定のカラム用FMTID(GUID)は速い扱いにしているものがあって、裏技的
ですが、それを使うと現状で早い扱いの拡張DLLにすることもできてしまいます。
DLLを作成されているとしたら、GetColumnInfoとGetItemDataでscid.fmtidを指定/判
別していると思いますが、これを以下の値にすると速い扱いのほうにできたりします。
文字列の書き方:
{8256FC70-8C5A-4ed8-98CA-98F2266C6DA2}
C++ソース上の書き方:
GUID xxx = { 0x8256fc70, 0x8c5a, 0x4ed8, { 0x98, 0xca, 0x98, 0xf2, 0x26, 0x6
c, 0x6d, 0xa2} };
これは秀丸ファイラー専用の独自カラムの「拡張子」でも使っている値で、本当は被
ったらいけないですが、DLLはCLSIDのほうで先に判別しているので、実際は動作して
しまいます。
独自カラムの「拡張子」のscid.fmtidは上記で、scid.pidは0を使っています。

[ ]
RE:09569 カラム拡張DLLの表示高速化No.09570
R さん 21/10/11 22:42
 
ありがとうございます。一瞬で表示される事を確認致しました。


(ただ、これだと1つのDLLで複数のカラムを実装する事が出来なくなってしまう… そ
れは別々のDLLに分割すればいいか)

[ ]
RE:09570 カラム拡張DLLの表示高速化No.09571
秀丸担当 さん 21/10/12 09:52
 

カラムの判別は、scid.fmtidと、scid.pidを組み合わせて判別しています。
scid.fmtidは同じにしておいて、scid.pidを別にすると1つのDLLでも複数のカラムを
入れることができるようになると思います。

[ ]