比如我桌面上有个qq的快捷方式,名称为:C:\Documents and Settings\tanwei\桌面\腾讯QQ.lnk
 但是我qq应用程序路径为:D:\聊天软件\QQ.exe
 
 就是如何根据快捷方式名获取相应的exe执行文件的路径?
谢谢大家了
   
 

解决方案 »

  1.   

    Sample Code
    The following code shows how to obtain the filename or path and description of a given link file: 
       #include <windows.h>
       #include <shlobj.h>   // GetLinkInfo() fills the filename and path buffer
       // with relevant information.
       // hWnd         - calling application's window handle.
       //
       // lpszLinkName - name of the link file passed into the function.
       //
       // lpszPath     - the buffer that receives the file's path name.
       //
       // lpszDescription - the buffer that receives the file's
       // description.
       HRESULT
       GetLinkInfo( HWND    hWnd,
                    LPCTSTR lpszLinkName,
                    LPSTR   lpszPath,
                    LPSTR   lpszDescription)
       {      HRESULT hres;
          IShellLink *pShLink;
          WIN32_FIND_DATA wfd;   // Initialize the return parameters to null strings.
          *lpszPath = '\0';
          *lpszDescription = '\0';   // Call CoCreateInstance to obtain the IShellLink
       // Interface pointer. This call fails if
       // CoInitialize is not called, so it is assumed that
       // CoInitialize has been called.
          hres = CoCreateInstance( &CLSID_ShellLink,
                                   NULL,
                                   CLSCTX_INPROC_SERVER,
                                   &IID_IShellLink,
                                   (LPVOID *)&pShLink );      if (SUCCEEDED(hres))
          {
             IPersistFile *ppf;   // The IShellLink Interface supports the IPersistFile
       // interface. Get an interface pointer to it.
             hres = pShLink->lpVtbl->QueryInterface(pShLink,
                                                &IID_IPersistFile,
                                                (LPVOID *)&ppf );
             if (SUCCEEDED(hres))
             {
                WORD wsz[MAX_PATH];   // Convert the given link name string to a wide character string.
                MultiByteToWideChar( CP_ACP, 0,
                                     lpszLinkName,
                                     -1, wsz, MAX_PATH );
       // Load the file.
                hres = ppf->lpVtbl->Load(ppf, wsz, STGM_READ );
                if (SUCCEEDED(hres))
                {
       // Resolve the link by calling the Resolve() interface function.
       // This enables us to find the file the link points to even if
       // it has been moved or renamed.
                   hres = pShLink->lpVtbl->Resolve(pShLink,  hWnd,
                                                   SLR_ANY_MATCH | SLR_NO_UI);
                   if (SUCCEEDED(hres))
                   {
       // Get the path of the file the link points to.
                      hres = pShLink->lpVtbl->GetPath( pShLink, lpszPath,
                                                   MAX_PATH,
                                                   &wfd,
                                                   SLGP_SHORTPATH );   // Only get the description if we successfully got the path
       // (We can't return immediately because we need to release ppf &
       //  pShLink.)
                      if(SUCCEEDED(hres))
                      {
       // Get the description of the link.
                        hres = pShLink->lpVtbl->GetDescription(pShLink,
                                                             lpszDescription,
                                                             MAX_PATH );
                      }
                   }
                }
                ppf->lpVtbl->Release(ppf);
             }
             pShLink->lpVtbl->Release(pShLink);
          }
          return hres;
       }
      

  2.   

    谢谢了,非常感谢
    这段代码可度性不是很好,我找了段代码,跟你提供的差不多,不过个人觉得更好点
    http://www.vckbase.com/document/viewdoc/?id=1595恩 谢谢大家了