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 );
}
 
 
ウィキ募集バナー