Login dark
title: MFC开发之从快捷方式获取路径
author: 零贰
date: 2020-08-09 13:04:17
category: [编程代码]
tags: [VC6,代码,学习]

MFC开发之从快捷方式获取路径

@TOC

_

正文

1、要注意不同的计算机登录用户名不一样,需要获取用户名

DWORD dwNameLen = 255;

wchar_t szBuffer[255];
memset(szBuffer, 0, sizeof(szBuffer));
GetUserName(szBuffer, &dwNameLen);//获取电脑当前登录的用户名szBuffer

2、不能获取所有快捷方式的路径,可能和32位64位有关系,也可能是别的原因

//inFile是快捷方式文件名
//返回快捷方式所指向的文件名
CString ExpandShortcut(CString &inFile)
{

CString   outFile = _T(" ");

ASSERT(inFile != _T(""));

IShellLink*   psl;
HRESULT   hres;
LPTSTR   lpsz = inFile.GetBuffer(MAX_PATH);

hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres))
{
    IPersistFile*   ppf;
    hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
    if (SUCCEEDED(hres)) 
    {

ifndef _UNICODE

        wchar_t   wsz[MAX_PATH];
        ::MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);
        hres = ppf->Load(wsz, STGM_READ);

else

        hres = ppf->Load(lpsz, STGM_READ);

endif

        if (SUCCEEDED(hres))   
        {
            WIN32_FIND_DATA   wfd;
            HRESULT   hres = psl->GetPath(outFile.GetBuffer(MAX_PATH),
                MAX_PATH,
                &wfd,
                SLGP_UNCPRIORITY);

            outFile.ReleaseBuffer();
        }
        ppf->Release();
    }
    psl->Release();
}

inFile.ReleaseBuffer();

return   outFile;

}

_

  • [原文链接]()
  • 注:知识搬运,供学习交流使用,侵联删!

_