C言語でファイルを作成するときに
fopen("ディレクトリ/ファイル名","w");
これでファイルが存在しない場合はファイルが作成されると思うのですが
ショートカットファイルを作成したい場合はどのようにすればよろしいのでしょうか?
ショートカットファイル作成
Re:ショートカットファイル作成
実はショートカットをを扱うためのCOMコンポーネントが用意されています。
IShellLink あたりで検索すると幸せになれるかもしれません。
IShellLink あたりで検索すると幸せになれるかもしれません。
Re:ショートカットファイル作成
ショートカットというのは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;
}
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;
}