getshortcut.txt
上传用户:rml117
上传日期:2007-01-04
资源大小:1k
文件大小:1k
- 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;}