ソフトウェア開発 Win32プログラミング

ショートカット(シェルリンク)の作成

戻る


ショートカット(シェルリンク)ファイル(拡張子LNK)を作成する方法を以下に示す。

#include <windows.h>
#include <shlobj.h>

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "uuid.lib")

// CreateShortcut - ショートカット(シェルリンク)を作成する関数。
BOOL CreateShortcut(
    LPCTSTR pszLnkFileName, 
    LPCTSTR pszTargetPathName, 
    LPCTSTR pszDescription)
{
    IPersistFile*   ppf;
    IShellLink* psl;
    HRESULT hres;
#ifndef UNICODE
    WCHAR   wsz[MAX_PATH];
#endif

    hres = CoInitialize(NULL);
    if(SUCCEEDED(hres))
    {
        hres = CoCreateInstance(CLSID_ShellLink, NULL, 
            CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
        if(SUCCEEDED(hres))
        {
            psl->SetPath(pszTargetPathName);
            if (pszDescription != NULL)
                psl->SetDescription(pszDescription);

            hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
            if(SUCCEEDED(hres))
            {
#ifdef UNICODE
                hres = ppf->Save(pszLnkFileName, TRUE);
#else
                MultiByteToWideChar(CP_ACP, 0, pszLnkFileName, -1, wsz, 
                                    MAX_PATH);
                hres = ppf->Save(wsz, TRUE);
#endif
                ppf->Release();
            }
            psl->Release();
        }
        CoUninitialize();
    }
    SetLastError(hres);

    return SUCCEEDED(hres);
}

#ifdef UNITTEST
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
    return CreateShortcut(
        "C:\\TEST.LNK", 
        "C:\\WINDOWS\\WIN.INI",
        "Windowsの設定ファイルへのショートカットです。");
}
#endif

仮引数のpszLnkFileNameには、フルパスを指定しなければならないことに注意。 pszDescriptionは、ショートカットのコメントを指定する(NULLで省略可能)。

ソース: shortcut.zip


戻る

©片山博文MZ
katayama.hirofumi.mz@gmail.com

inserted by FC2 system