Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> シェル >> ショートカットファイル(*.lnk)を作成するには

ショートカットファイル(*.lnk)を作成するには

  ショートカットファイルを作成するには、IShellLink インターフェースを使用します。
  ショートカットファイルはフォーマットが簡単なので、バイナリで直接作成することもできなくないのですが、Windowsのバージョンが変わった際にフォーマットが異なると怖いので、IShellLink を使用しましょう。

  以下は、サンプルになります。

※ ANSIコンパイル用のみですが、UNICODE版の方が簡単です。
※ "C:\temp\sample.exe" のショートカットを "C:\temp\sample.lnk" として作成します。先に"C:\temp\sample.exe"に適当なEXEファイルを置いてください。

 

■■■ createshortcut プロジェクト
■ main.cpp
#include <windows.h>
#include <shlobj.h>

// ショートカット作成
BOOL CreateShortcut ( const char *pszTargetPath /* ターゲットパス */,
    const char *pszArguments /* 引数 */,
    const char *pszWorkPath /* 作業ディレクトリ */,
    int nCmdShow /* ShowWindowの引数 */,
    const char *pszShortcutPath /* ショートカットファイル(*.lnk)のパス */ )
{
    IShellLink *psl;
    IPersistFile *ppf;
    enum
    {
        MY_MAX_PATH = 65536
    };
    WCHAR wcLink[ MY_MAX_PATH ];

    // IShellLinkインターフェースの作成
    if ( FAILED ( CoCreateInstance ( CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER, IID_IShellLink, ( void ** ) &psl ) ) )
    {
        return FALSE;
    }

    // 設定
    psl->SetPath ( pszTargetPath );
    psl->SetArguments ( pszArguments );
    psl->SetWorkingDirectory ( pszWorkPath );
    psl->SetShowCmd ( nCmdShow );

    // IPersistFileインターフェースの作成
    if ( FAILED ( psl->QueryInterface ( IID_IPersistFile, ( void ** ) &ppf ) ) )
    {
        psl->Release ();
        return FALSE;
    }
    
    // lpszLinkをWCHAR型に変換
    MultiByteToWideChar ( CP_ACP, 0, pszShortcutPath, -1, wcLink, MY_MAX_PATH );
    if ( FAILED ( ppf->Save ( wcLink, TRUE ) ) )
    {
        ppf->Release ();
        return FALSE;
    }

    // 解放
    ppf->Release ();
    psl->Release ();

    return TRUE;
}

// エントリポイント
int WINAPI WinMain ( HINSTANCE,
    HINSTANCE,
    char *,
    int )
{
// "C:\\temp\\sample.exe" のショートカットを "C:\\temp\\sample.lnk"として作成します。

    CreateShortcut ( "C:\\temp\\sample.exe",
        "",
        "C:\\temp",
        SW_SHOW,
        "C:\\temp\\sample.lnk" );
    
    return 0;
}
  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita