Win32 APIで、ショートカットファイルを作成する方法のメモです。
COMの機能を使います。
いつもどおり詳しい解説無しでサンプルです。
HRESULT hRes;
IShellLink *isLink = NULL;
IPersistFile *ipFile = NULL;
WCHAR wPath[MAX_PATH+1];
//COMを初期化
CoInitialize(NULL);
//IShellLinkを取得
hRes = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID *)&isLink);
if(SUCCEEDED(hRes)){
//COMの破棄
CoUninitialize();
IShellLink *isLink = NULL;
IPersistFile *ipFile = NULL;
WCHAR wPath[MAX_PATH+1];
//COMを初期化
CoInitialize(NULL);
//IShellLinkを取得
hRes = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID *)&isLink);
if(SUCCEEDED(hRes)){
//パスの設定
isLink->SetPath("c:\\cmd.exe");
//実行時引数(スイッチ)の設定
isLink->SetArguments("/?");
//作業フォルダの設定
isLink->SetWorkingDirectory("c:\\");
//IPersistFileを取得
hRes = isLink->QueryInterface(IID_IPersistFile,(void**)&ipFile);
if(SUCCEEDED(hRes)){
//IShellLinkを破棄
isLink->Release();
}else{isLink->SetPath("c:\\cmd.exe");
//実行時引数(スイッチ)の設定
isLink->SetArguments("/?");
//作業フォルダの設定
isLink->SetWorkingDirectory("c:\\");
//IPersistFileを取得
hRes = isLink->QueryInterface(IID_IPersistFile,(void**)&ipFile);
if(SUCCEEDED(hRes)){
//パスをマルチバイトに変換
MultiByteToWideChar(CP_ACP,0,"c:\\cmd.lnk",-1,wPath,MAX_PATH);
//ディスクに保存する
hRes = ipFile->Save(wPath,TRUE);
//IPersistFileの破棄
ipFile->Release();
}MultiByteToWideChar(CP_ACP,0,"c:\\cmd.lnk",-1,wPath,MAX_PATH);
//ディスクに保存する
hRes = ipFile->Save(wPath,TRUE);
//IPersistFileの破棄
ipFile->Release();
//IShellLinkを破棄
isLink->Release();
//失敗
}//COMの破棄
CoUninitialize();
ポイント?としては「MultiByteToWideChar」を使用してパスのデータを変換する必要が
あることでしょうか。
詳しく調べるには↓のリンクへ
・IShellLinkで、ぐぐる。
・IPersistFileで、ぐぐる。
あやね
追記:
パスの設定をするところで
isLink->SetIconLocation("c:\\cmd.exe",0);
を追加するとショートカットのアイコンを変更できます。