rai002 @ ウィキ
ショートカットの情報を取得し返す
最終更新:
rai002
-
view
//**********************************************************************
// ショートカットの情報を取得し返す
// インクルードファイル:
// locale.h
// .Net Framework 2.0 以上で利用可能
// [引数]:ショートカへのアドレス
// [戻値]:ショートカットの中身のアドレス
//**********************************************************************
string get_dir::Get_Short_Cut_link_Info( string original_URL )
{
//メンバ変数初期化
IShellLink *ShLinkInterface = NULL;
IPersistFile *PerFileInterface = NULL;
HRESULT result; //各結果
//初期化
result = CoInitialize(NULL);
if( result == E_OUTOFMEMORY ) return original_URL;
if( result == E_INVALIDARG ) return original_URL;
if( result == E_UNEXPECTED ) return original_URL;
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&ShLinkInterface);
if( result == CLASS_E_NOAGGREGATION ) return original_URL;
if( result == REGDB_E_CLASSNOTREG ) return original_URL;
result = ShLinkInterface->QueryInterface( IID_IPersistFile, (void**)&PerFileInterface);
if( result != S_OK ) return original_URL;
//ユニコードに変換
OLECHAR ochLinkFile[ MAX_PATH_NAME ];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, original_URL.c_str(), -1, ochLinkFile, MAX_PATH_NAME );
//ショートカットの読み出し
result = PerFileInterface->Load( ochLinkFile, STGM_READ);
wchar_t temp[MAX_PATH_NAME];
if( result == S_OK ){
result = ShLinkInterface->Resolve( NULL, SLR_UPDATE );
if( result != NOERROR ) return original_URL;
ShLinkInterface->GetPath( temp , MAX_PATH_NAME, NULL, SLGP_UNCPRIORITY); //問題点
}else{
}
//後処理
PerFileInterface->Release();
if( ShLinkInterface ) ShLinkInterface->Release();
CoUninitialize();
return wchar_t_To_string( temp );
}