获取快捷方式的目标和参数

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

获取快捷方式(.lnk)的目标和参数

我看了Michael Taupitz关于建立快捷方式的方法,我认为有很多时候当我

们在命令行模式中偶然发现一个快捷方式的时候,我们不知道这个.lnk文件指

向什么地方。

我写了一个函数,它以CString的形式返回了.lnk文件的目标和参数。

CString GetShortcutTarget(const CString LinkFileName)

{

HRESULT hres;

CString Link, Temp = LinkFileName;

Temp.MakeLower();

if (Temp.Find(".lnk")==-1) //Check if the name ends with .lnk

Link = LinkFileName + ".lnk"; //if not, append it

else

Link = LinkFileName;

CString Info;

Info.Empty();

IShellLink* psl;

//Create the ShellLink object

hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,

IID_IShellLink, (LPVOID*) &psl);

if (SUCCEEDED(hres))

{

IPersistFile* ppf;

//Bind the ShellLink object to the Persistent File

hres = psl-QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);

if (SUCCEEDED(hres))

{

WORD wsz[MAX_PATH];

//Get a UNICODE wide string wsz from the Link path

MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Link, -1, wsz, MAX_PATH);

//Read the link into the persistent file

hres = ppf-Load(wsz, 0);

if (SUCCEEDED(hres))

{

//Read the target information from the link object

//UNC paths are supported (SLGP_UNCPRIORITY)

psl-GetPath(Temp.GetBuffer(1024), 1024, NULL, SLGP_UNCPRIORITY);

Temp.ReleaseBuffer();

Info = Temp;

//Read the arguments from the link object

psl-GetArguments(Temp.GetBuffer(1024), 1024);

Temp.ReleaseBuffer();

Info += " " + Temp;

}

}

}

psl-Release();

//Return the Target and the Argument as a CString

return Info;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有