問題タブ [shell-namespace-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
739 参照

c++ - Windows 7 の C++ で仮想フォルダのショートカットを作成するには?

使用しているプラ​​ットフォームは Windows 7 です。Windows 7 で仮想フォルダーのショートカットを作成する必要があります。Windows 7 SDK サンプルを使用して、コンピューターの下に仮想フォルダーを作成します。

ここに画像の説明を入力

サンプル プロジェクト名は と呼ばExplorerDataProviderれ、IShellFolder クラスの CLSID を定義します。

の定義CFolderViewImplFolder_CreateInstanceは次のとおりです。

そしてCFolderViewImplFolder実装IShellFolder2amd IPersistFolder2。ここでプリンターのショートカットを作成するために使用される同様のコードを見つけました: https://www.codeproject.com/Articles/596642/Creating-a-shortcut-programmatically-in-Cplusplus および https://msdn.microsoft. com/en-us/library/aa969393.aspx#Shellink_Item_Identifiers

IShellFolder のクラス識別子を取得したら、CoCreateInstance 関数を呼び出してインターフェイスのアドレスを取得できます。次に、インターフェイスを呼び出してフォルダー内のオブジェクトを列挙し、検索しているオブジェクトのアイテム識別子のアドレスを取得できます。最後に、IShellLink::SetIDList メンバー関数の呼び出しでアドレスを使用して、オブジェクトへのショートカットを作成できます。

改訂しました

また

しかし、pVirtualFolder はまだ NULL であり、「対応するインターフェイスが見つかりません」と表示されます。

CoCreateInstance使用時に何か問題はありますか?または、このソリューションを使用しないでください。そのためのサンプルコードはありますか?

0 投票する
1 に答える
152 参照

c++ - ユーザーがwin 7のアプリからWindowsエクスプローラーを開いたときにのみ仮想フォルダーを表示する方法は?

--------------------------------2回目の更新---------------- --------

私は試した:

これはうまくいきません。txtファイルに出力される内容は次のとおりです。 00000000000CDEE0 そして、dllを登録すると一度だけ出力されます。その後、仮想フォルダーを何度参照しても、それを開いても、文字列を再度印刷するために DllMain を入力することはありません。


次のように、Microsoft Windows 7.0 SDK サンプル ( ExplorerDataProvider ) を使用して、「マイ コンピューター」に仮想フォルダーを作成しています。 ここに画像の説明を入力

ファイル ブラウザ ダイアログを開くと、この仮想フォルダが表示されます。Microfost オフィスから [名前を付けて保存] をクリックすると、Windows ファイル エクスプローラー ダイアログがポップアップし、この仮想フォルダーが表示されます。「エクスポート」をクリックするとファイルを保存できるC++アプリケーションを作成しました。Windows ファイル エクスプローラー ダイアログが開き、ユーザーがディレクトリを選択して [保存] をクリックすると、ファイルを保存できます。私の問題は次のとおりです。C++ プログラムを使用してファイル ダイアログを開くときにのみ、仮想フォルダーが表示されることを願っています。アプリケーションの外部で Windows エクスプローラーを開くと、仮想フォルダーが表示されません。どうすればそれができますか?仮想フォルダーのdllを登録すると、仮想フォルダーは常にそこにあるようです。

SetVisibleの関数のようなものは見つかりませんでしたIShellFolder