私が使用しているプラットフォームは、私はコンピュータの下に仮想フォルダを作成するには、Windows 7 SDKのサンプルを使用するWindows 7 に仮想フォルダのショートカットを作成する必要がWindows 7である:Windows 7のC++で仮想フォルダのショートカットを作成する方法は?
サンプルプロジェクト名がExplorerDataProvider
と呼ばれ、それがIShellFolderクラスのCLSIDを定義しています
// add classes supported by this module here
const CLASS_OBJECT_INIT c_rgClassObjectInit[] =
{
{ &CLSID_FolderViewImpl, CFolderViewImplFolder_CreateInstance },
{ &CLSID_FolderViewImplContextMenu,CFolderViewImplContextMenu_CreateInstance },
};
CFolderViewImplFolder_CreateInstance
の定義は次のとおりです。
そして、CFolderViewImplFolder
は、IShellFolder2
amd IPersistFolder2
を実装しています。 https://www.codeproject.com/Articles/596642/Creating-a-shortcut-programmatically-in-Cplusplus 、あなたがIShellFolderのクラス識別子を持っていたら、インタフェースのアドレスを取得するために、CoCreateInstance関数を呼び出すことができます https://msdn.microsoft.com/en-us/library/aa969393.aspx#Shellink_Item_Identifiers
中: 私はここで、プリンタのショートカットを作成するために使用された同様のコードを見つけました。次に、インターフェイスを呼び出して、フォルダ内のオブジェクトを列挙し、検索するオブジェクトのアイテム識別子のアドレスを取得できます。最後に、IShellLink :: SetIDListメンバ関数の呼び出しでアドレスを使用して、オブジェクトへのショートカットを作成することができます。
私は
// testFolder is the CLSID for the virtual folder implementation
hr = CoCreateInstance(testFolder, NULL, CLSCTX_INPROC_SERVER, IID_IShellFolder, (LPVOID*)&pVirtualFolder);
または
hr = CoCreateInstance(testFolder, NULL, CLSCTX_INPROC_SERVER, IID_IShellFolder2, (LPVOID*)&pVirtualFolder);
に
hr = SHGetMalloc(&pMalloc);
hr = SHGetDesktopFolder(&pDesktopFolder);
hr = SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &netItemIdLst);
hr = pDesktopFolder->BindToObject(netItemIdLst, NULL, IID_IShellFolder, (void **)&pPrinterFolder);
を改訂しかしpVirtualFolderはまだNULLであり、それは "対応するインターフェイスを見つけることができない" ことを表示します。
CoCreateInstance
私はそれを使用する際に問題がありますか?または、私はこのソリューションを使用すべきではありませんか?どのサンプルコードですか?
短い答え:あなたはC++でそれを行うことはできません。 OS /プラットフォーム固有のAPIを使用して実行することができますが、使用するOS、使用するプラットフォーム、APIを指定する必要があります。 – Slava
windows 7.それはあなたが求めていることですか? – beasone
CoCreateInstanceは直接使用しないでください。シェルがそれをやりましょう。 –