getshortcut.txt
上传用户:rml117
上传日期:2007-01-04
资源大小:1k
文件大小:1k
源码类别:

Shell编程

开发平台:

Visual C++

  1. CString GetShortcutTarget(const CString LinkFileName){ HRESULT hres;
  2. CString Link, Temp = LinkFileName; Temp.MakeLower();
  3. if (Temp.Find(".lnk")==-1)           //Check if the name ends with .lnk
  4. Link = LinkFileName + ".lnk";   //if not, append it else Link = LinkFileName;
  5. CString Info; Info.Empty(); IShellLink* psl; //Create the ShellLink object
  6. hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
  7. IID_IShellLink, (LPVOID*) &psl); if (SUCCEEDED(hres)) { IPersistFile* ppf;
  8. //Bind the ShellLink object to the Persistent File
  9. hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);
  10. if (SUCCEEDED(hres)) { WORD wsz[MAX_PATH];
  11. //Get a UNICODE wide string wsz from the Link path
  12. MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Link, -1, wsz,      MAX_PATH);
  13. //Read the link into the persistent file hres = ppf->Load(wsz, 0);
  14. if (SUCCEEDED(hres)) {
  15. //Read the target information from the link object
  16. //UNC paths are supported (SLGP_UNCPRIORITY)
  17. psl->GetPath(Temp.GetBuffer(1024), 1024, NULL,               SLGP_UNCPRIORITY);
  18. Temp.ReleaseBuffer(); Info = Temp;
  19. //Read the arguments from the link object
  20. psl->GetArguments(Temp.GetBuffer(1024), 1024); Temp.ReleaseBuffer();
  21. Info += " " + Temp; } } } psl->Release();
  22. //Return the Target and the Argument as a CString return Info;}