指定されたパスがショートカットファイルやリンクファイルかどうかを調べる。
独自にファイルを開くアプリケーションを作るときは先にショートカットかどうかを調べて、ショートカットファイルであればそのリンク先を取得して開く方がいい場合もある。この手の実装漏れはリリース直前のテスト作業でも発見できないことがあるので要注意かもしれない。
#include "shobjidl.h"
#include "shellapi.h"
//
// ファイルがショートカットかどうか
//
// 正常な.lnkと.urlならtrueが返る
//
bool IsShortcut(LPCTSTR pszFile)
{
DWORD_PTR dwRet;
SHFILEINFO info;
dwRet = ::SHGetFileInfo(pszFile,0,&info, sizeof(SHFILEINFO),SHGFI_ATTRIBUTES);
if(dwRet == 0)
return false;
return (info.dwAttributes & SFGAO_LINK) ? true : false;
}
void Test(void)
{
bool ret;
ret = IsShortcut(_T("c:\\IO.SYS"));
if(ret)
::MessageBox(NULL,_T("ショートカットファイルです"),_T(""),MB_OK);
else
::MessageBox(NULL,_T("ショートカットファイルではありません"),_T(""),MB_OK);
}
