0

カスタム ファイル形式をプレビュー ペインに表示するためのエクスプローラー拡張機能を作成しました。これは Windows 7 では正常に機能しますが、Vista では機能しないようです。同じ DLL がサムネイルとプレビュー ウィンドウの両方を処理します。サムネイル側は、Vista と Windows7 の両方で機能します。

コードにログを追加すると、プレビュー ハンドラ クラスではなく、サムネイル クラスに対してのみ DllGetClassObject 関数が呼び出されます。

COM DLL を呼び出すときに、Vista が Windows7 と異なる動作をすることは明らかですか?

レジストリに追加する値は次のとおりです。

HKEY_CLASSES_ROOT\\.<myext>\\(default) = "<myext>.Thumbnail.Handler.1"
HKEY_CLASSES_ROOT\\<myext>.Thumbnail.Handler.1\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}\\(default) = "<myguid>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\(default) = "<myext> Preview Handler"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\DisplayName = "@ExplorerPreviewHandler.dll,-101"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\Icon = "@ExplorerPreviewHandler.dll,201"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\AppID = "{6d2b5079-2f0b-48dd-ab7f-97cec514d30b}"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\(default) = "<path to my dll>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ThreadingModel = "Apartment"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ProgID = "<myext>.Thumbnail.Handler.1"
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers\\<myguid> = "<myext> Preview Handler"},

私の DllGetClassObject が呼び出されていないことを考えると、問題はレジストリに設定しているものに関係していると思いますか? DLL エクスポートは、Vista と Win7 の両方のサムネイルで機能し、Windows7 のプレビュー ペインで機能するため、問題ないことはわかっています。

DLL は x64 であり、Vista と Win7 の両方の OS も同様です。DLL は ATL を使用せずに C++ で記述されています。

これについて何か助けてくれてありがとう、ダン。

4

1 に答える 1

1

reg は問題ないように見えますが、デフォルトの progid だけが欠落しています。Win7 には、PreviewHandlers キーの場所に関する別の動作が文書化されています。残念ながら、SDK のドキュメントには、Vista に必要なものは記載されていません。Vista タイムマガジンの記事では、HKCU の代わりに HKLM を使用しています。きっとそれだけです。

于 2010-05-11T14:02:35.410 に答える