LNKファイル(ショートカット)によるターゲットファイルのパスの解析
1934 ワード
ニマの~ネット上で多くの资料を探してすべて问题のコードがあって、各种の転送、间违ったものが伝わってきて、人の子弟を间违えます!!!
自分で書き直して、注釈をつけて、予備を残しておきます.
参照ヘッダ:#include
重要参照クラスIShellLink:
IShellLinkの主な方法:1、GetArguments:パラメータ情報の取得2、GetDescription:記述情報の取得3、GetHotkey:ショートカットキーの取得4、GetIconLocation:ショートカットアイコンの取得5、GetIDList:ショートカットのターゲットオブジェクトを取得するitem identifier list(Windowsハウジング内のファイル、ディレクトリ、プリンタなどの各オブジェクトに一意のitem identifiler listがある)6、GetPath:ショートカットのターゲットファイルまたはディレクトリを取得する全パス7、GetShowCmd:ショートカットを取得する実行方法、例えば通常のウィンドウ、最大化8、GetWorkingDirectory:作業ディレクトリ9、Resolveの取得:ターゲットオブジェクトが削除または移動された場合でも、特定の検索ルールに従ってターゲットオブジェクトを取得しようとします.名前を変更します.
解析処理の流れ:
1、COMインタフェースの初期化
2、IShellLinkオブジェクトの作成
3、IShellLinkオブジェクトからIPersistFileオブジェクトインタフェースを取得する
4、操作IShellLinkオブジェクト
5、IPersistFileオブジェクトインタフェースを解放する
6、IShellLinkオブジェクトの解放
7、COMインタフェースを解放する
自分で書き直して、注釈をつけて、予備を残しておきます.
参照ヘッダ:#include
重要参照クラスIShellLink:
IShellLinkの主な方法:1、GetArguments:パラメータ情報の取得2、GetDescription:記述情報の取得3、GetHotkey:ショートカットキーの取得4、GetIconLocation:ショートカットアイコンの取得5、GetIDList:ショートカットのターゲットオブジェクトを取得するitem identifier list(Windowsハウジング内のファイル、ディレクトリ、プリンタなどの各オブジェクトに一意のitem identifiler listがある)6、GetPath:ショートカットのターゲットファイルまたはディレクトリを取得する全パス7、GetShowCmd:ショートカットを取得する実行方法、例えば通常のウィンドウ、最大化8、GetWorkingDirectory:作業ディレクトリ9、Resolveの取得:ターゲットオブジェクトが削除または移動された場合でも、特定の検索ルールに従ってターゲットオブジェクトを取得しようとします.名前を変更します.
解析処理の流れ:
1、COMインタフェースの初期化
2、IShellLinkオブジェクトの作成
3、IShellLinkオブジェクトからIPersistFileオブジェクトインタフェースを取得する
4、操作IShellLinkオブジェクト
5、IPersistFileオブジェクトインタフェースを解放する
6、IShellLinkオブジェクトの解放
7、COMインタフェースを解放する
// 1:Lnk , 2:
bool GetShellPath(Char *Src,Char *ShellPath)
{
bool blret=false;
::CoInitialize(NULL); // COM
IShellLink *psl = NULL;
// COM ,IShellLink
HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID *)&psl);
if (SUCCEEDED(hr))
{
IPersistFile *ppf ;
hr=psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hr))
{
WCHAR wsz[MAX_PATH] ;
MultiByteToWideChar( CP_ACP, 0, Src, -1, wsz, MAX_PATH ) ; //
hr=ppf->Load(wsz, STGM_READ); //
if (SUCCEEDED(hr))
{
WIN32_FIND_DATA wfd ;
psl->GetPath(ShellPath,MAX_PATH, (WIN32_FIND_DATA*)&wfd,SLGP_SHORTPATH); //
blret=true;
}
ppf->Release();
}
psl->Release(); //
}
::CoUninitialize(); // COM
return blret;
}