ショートカット(.lnk)を作成する

たまに聞かれるので、ネタにしておきます。
ショートカットを作成するには IShellLink をいう COM インターフェースを使います。
COM というと、敬遠してしまうかもしれませんが、簡単です。

コード例も書いておきます。COM なので、処理を楽にするために ATL を使っています。

HRESULT CreateLink(
    LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc, LPCSTR lpszWkDir)
{
  CComPtr<IShellLink> pIShellLink;
  HRESULT hr = pIShellLink.CoCreateInstance(CLSID_ShellLink);
  if (SUCCEEDED(hr))
  {
    // リンク先
    pIShellLink->SetPath(lpszPathObj);
    // コメント
    pIShellLink->SetDescription(lpszDesc);
    // 作業フォルダ
    pIShellLink->SetWorkingDirectory(lpszWkDir);
    // ショートカットに名前を付ける
    CComPtr<IPersistFile> ppf;
    hr = pIShellLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
    if (SUCCEEDED(hr))
    {
      WCHAR wszPath[MAX_PATH];
       MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wszPath, MAX_PATH);
       hr = ppf->Save(wszPath, TRUE);
    }
  }
  return hr;
}

これだけです。コード量もたいしたことないです。
こんな感じで使います。

HRESULT hr = CoInitialize(NULL);
hr = CreateLink(
   TEXT("F:\\サンプル用プログラム\\メモ帳\\notepad.exe"),
   TEXT("F:\\サンプル用プログラム\\メモ帳\\メモ帳.lnk"),
   TEXT("サンプルのショートカット"),
   TEXT("F:\\サンプル用プログラム\\メモ帳"),
);
CoUninitialize();
ショートカットの作成は、インストーラーやセットアップで使ったりしますね。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。