ページ 11

ショートカットファイル作成

Posted: 2010年9月29日(水) 06:00
by りょう
C言語でファイルを作成するときに
fopen("ディレクトリ/ファイル名","w");
これでファイルが存在しない場合はファイルが作成されると思うのですが
ショートカットファイルを作成したい場合はどのようにすればよろしいのでしょうか?

Re:ショートカットファイル作成

Posted: 2010年9月29日(水) 07:44
by ookami
ショートカット ファイル フォーマット
あたりで検索すると、参考になるかもしれません。

Re:ショートカットファイル作成

Posted: 2010年9月29日(水) 07:59
by へろりくしょん
実はショートカットをを扱うためのCOMコンポーネントが用意されています。

IShellLink あたりで検索すると幸せになれるかもしれません。

Re:ショートカットファイル作成

Posted: 2010年9月29日(水) 08:29
by toyo
ショートカットというのはWindowsですよね
C++で電卓のショートカットを作ってみました
#define _CRT_SECURE_NO_WARNINGS
#include <shlobj.h>

int main(void)
{
LPCTSTR programPath = TEXT("%SystemRoot%\\system32\\calc.exe"); // 電卓のパス
wchar_t linkPath[MAX_PATH]; // ショートカット名はユニコード限定

// デスクトップフォルダ取得(デスクトップかスタートメニューにしか作れない)
LPITEMIDLIST pidl;
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &pidl);
SHGetPathFromIDListW(pidl, linkPath);
wcscat(linkPath, L"\\calc.lnk");

IShellLink* sl;
IPersistFile* pf;
CoInitialize(NULL); // COMライブラリを初期化
if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&sl) == S_OK)
{
if (sl->QueryInterface(IID_IPersistFile,(void **)&pf) == S_OK)
{
sl->SetPath(programPath); // プログラムパス
sl->SetDescription(NULL); // 説明(= ツールチップス)
sl->SetArguments(NULL); // コマンドライン引数
sl->SetWorkingDirectory(NULL); // 作業ディレクトリ
sl->SetIconLocation(NULL, 0); // Iconのパスまたはインデックス
sl->SetShowCmd(SW_SHOWNORMAL); // 起動時のウィンドウ表示
pf->Save(linkPath, TRUE); // ショートカットを保存
pf->Release(); // IPersistFileへのポインタを破棄
pf = NULL;
}
sl->Release(); // IShellLinkへのポインタを破棄
sl = NULL;
}
CoUninitialize (); // COMライブラリをクローズ
return 0;
}