アトリエ ぺっぺ

トップページ > プログラムTips > ショートカットのリンク先を取得

◆ ショートカットのリンク先を取得
ショートカットから、そのリンク先を取得するには、ショートカットをロードし、その内容を取得します。
// ショートカットのロード
bool loadShellLink(IShellLink* psl, const WCHAR *wcLinkName, DWORD dwMode)
{
    HRESULT       hr;
    IPersistFile *ppf;

    if(psl->QueryInterface(IID_IPersistFile, (void**)&ppf) != S_OK){
        return false;
    }
    hr = ppf->Load(wcLinkName, dwMode);
    ppf->Release();
    return (hResult == S_OK);
}

// ショートカットのリンク先を取得
bool getTargetFile(const char* sLinkFile, CString& strTarget, WIN32_FIND_DATA* wfd)
{
    IShellLink*    psl;
    WCHAR          wcLinkFile[MAX_PATH+1];
    bool           ret(false);

    // インターフェイスを初期化
    CoInitialize(NULL);
    if(S_OK == CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl)){

        MultiByteToWideChar(CP_ACP, 0, sLinkFile, -1, wcLinkFile, MAX_PATH);
        // ショートカットのロード
        if(loadShellLink(psl, wcLinkFile, STGM_READ)){

            // リンク先を取得
            char TargetFile[MAX_PATH];
            psl->GetPath(TargetFile, MAX_PATH, wfd, SLGP_UNCPRIORITY);
            strTarget = TargetFile;
            // 戻り値を成功に設定
            ret = true;
        }
        psl->Release();
    }
    CoUninitialize();
    return ret;
}
 

(C) 2002 atelier-peppe
ababa@atelier-peppe.sakura.ne.jp