[PR]

ショートカットファイル(.lnk)の
リンク先を取得する

戻る

 ショートカットファイルのリンク先を取得する関数を作る。

//*********************************************************
// ショートカットのリンク先を取得する
//     LinkFile ……… ショートカットファイルの名前(*.lnk)
//   TargetFile ……… リンク先
//          wfd ……… リンク先の情報(サイズ、属性、日時など)
//*********************************************************
BOOL
GetTargetFile
	(
		const char            *LinkFile,
		      char            *TargetFile,
		      WIN32_FIND_DATA *wfd
	)
{
	IShellLink *psl;
	WCHAR       wcLinkFile[MAX_PATH+1];

	CoInitialize( NULL );
	if ( S_OK == CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl ) )
	{
		MultiByteToWideChar( CP_ACP, 0, LinkFile, -1, wcLinkFile, MAX_PATH );
		if ( LoadShellLink( psl, wcLinkFile, STGM_READ ) ) // ショートカットのロード
		{
			psl->GetPath( TargetFile, MAX_PATH, wfd, SLGP_UNCPRIORITY ); // リンク先を取得

			psl->Release();
			CoUninitialize();
			return TRUE; // 成功
		}
		psl->Release();
	}
	CoUninitialize();
	return FALSE; // 失敗
}//GetTargetFile

//*********************************************************
// LoadShellLink
//*********************************************************
BOOL
LoadShellLink
	(
		      IShellLink *psl,
		const WCHAR      *wcLinkName,
		      DWORD       dwMode
	)
{
	HRESULT       hResult;
	IPersistFile *ppf;

	if ( S_OK != psl->QueryInterface( IID_IPersistFile, (void **)&ppf ) )
		return FALSE;

	hResult = ppf->Load( wcLinkName, dwMode );
	ppf->Release();
	return S_OK == hResult;
}//LoadShellLink

関連

ショートカットファイル(.lnk)を作成する
ショートカットファイル(.lnk)にショートカットキーを設定する
関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる
インターフェイス(IMalloc, IShellLink など)を使用したコードでコンパイルエラーがでる



Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
キャラアニ.com
>> キャラアニ.com