获取快捷方式的属性

来源:互联网 发布:如何统计不重复的数据 编辑:程序博客网 时间:2024/06/07 11:42
从微软网站上面弄下来的
lpszLinkFile 文件名需要带上扩展名.lnk
比如 C:\\Program files\\QQ.lnk
// ResolveIt - Uses the Shell's IShellLink and IPersistFile interfaces //             to retrieve the path and description from an existing shortcut. //// Returns the result of calling the member functions of the interfaces. //// Parameters:// hwnd         - A handle to the parent window. The Shell uses this window to //                display a dialog box if it needs to prompt the user for more //                information while resolving the link.// lpszLinkFile - Address of a buffer that contains the path of the link,//                including the file name.// lpszPath     - Address of a buffer that receives the path of the link                  target, including the file name.// lpszDesc     - Address of a buffer that receives the description of the //                Shell link, stored in the Comment field of the link//                properties.#include "stdafx.h"#include "windows.h"#include "shobjidl.h"#include "shlguid.h"#include "strsafe.h"                            HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPWSTR lpszPath, int iPathBufferSize) {     HRESULT hres;     IShellLink* psl;     WCHAR szGotPath[MAX_PATH];     WCHAR szDescription[MAX_PATH];     WIN32_FIND_DATA wfd;      *lpszPath = 0; // Assume failure 
    CoInitialize(NULL); //用的时候如果没有调用这句需要加上    // Get a pointer to the IShellLink interface. It is assumed that CoInitialize    // has already been called.     hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);     if (SUCCEEDED(hres))     {         IPersistFile* ppf;          // Get a pointer to the IPersistFile interface.         hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);                 if (SUCCEEDED(hres))         {             WCHAR wsz[MAX_PATH];              // Ensure that the string is Unicode.             MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz, MAX_PATH);              // Add code here to check return value from MultiByteWideChar             // for success.             // Load the shortcut.             hres = ppf->Load(wsz, STGM_READ);                         if (SUCCEEDED(hres))             {                 // Resolve the link.                 hres = psl->Resolve(hwnd, 0);                 if (SUCCEEDED(hres))                 {                     // Get the path to the link target.                     hres = psl->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA*)&wfd, SLGP_SHORTPATH);                     if (SUCCEEDED(hres))                     {                         // Get the description of the target.                         hres = psl->GetDescription(szDescription, MAX_PATH);                         if (SUCCEEDED(hres))                         {                            hres = StringCbCopy(lpszPath, iPathBufferSize, szGotPath);                            if (SUCCEEDED(hres))                            {                                // Handle success                            }                            else                            {                                // Handle the error                            }                        }                    }                }             }             // Release the pointer to the IPersistFile interface.             ppf->Release();         }         // Release the pointer to the IShellLink interface.         psl->Release();     } 
    CoUninitialize();  //释放
    return hres; }