获取快捷方式的属性
来源:互联网 发布:如何统计不重复的数据 编辑:程序博客网 时间: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; }