【WIN32】【C/C++】获取快捷方式指向的位置 您所在的位置:网站首页 win10快捷方式目标修改 【WIN32】【C/C++】获取快捷方式指向的位置

【WIN32】【C/C++】获取快捷方式指向的位置

2024-04-03 07:25| 来源: 网络整理| 查看: 265

由于一个项目中涉及到一个功能,需要将系统任务栏上的快速启动功能加入程序中, 所以, 第一步就是找到快速启动文件夹所在位置,Windows XP一般在 C:\Documents and Settings\+用户名+\Application Data\Microsoft\Internet Explorer\Quick Launch下, Windows Vista 一般在C:\Users\+用户名+\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch下, 如我的系统是Vista,用户名为HP,所以路径为C:\Users\HP\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch。 第二步就是遍历文件夹,构造快捷方式的全路径。 第三步就是根据快捷方式全路径获取它所指向的原路径。 代码如下

/* ************************************ \* DWORD ListAllFileInDrectory(LPCWSTR szPath) \* 功能 遍历目录及所有子目录,打印路径 * \* 参数 LPCWSTR szPath,为需遍历的目录 * \* 返回值 0代表执行完成,1代码发生错误 **************************************/ DWORD CShellFile::ListAllFileInDrectory(LPCWSTR szPath) { HANDLE hListFile; WIN32_FIND_DATA FindFileData; WCHAR szFilePath[MAX_PATH]; WCHAR szFullPath[MAX_PATH]; //构造代表子目录和文件夹路径的字符串,使用通配符“*” lstrcpy(szFilePath, szPath); lstrcat(szFilePath, _T("\\*")); //查找第一个文件/目录,获得查找句柄 hListFile = FindFirstFile(szFilePath,&FindFileData); if(hListFile==INVALID_HANDLE_VALUE) { printf("错误:%d",GetLastError()); return 1; } else { do { // 过滤“.”和“..”,不需要遍历 if(lstrcmp(FindFileData.cFileName,TEXT("."))==0 || lstrcmp(FindFileData.cFileName,TEXT(".."))==0) { continue; } //构造成全路径 wsprintf(szFullPath,_T("%s\\%s"),szPath,FindFileData.cFileName); CString fileExt=CString(szFullPath).Mid(CString(szFullPath).ReverseFind( '.')+1);//文件扩展名 if (fileExt == _T("lnk"))//不是快捷方式的不要 { WCHAR buf[MAX_PATH]; if(GetShortCutFile(szFullPath,buf,sizeof(buf))) { if (CString(buf).Mid(CString(buf).ReverseFind('.')+1) == _T("exe"))//不是exe的不要 { HICON hIcon1,hIcon2;//大小图标的资源句柄 ::ExtractIconExW(CString(buf),0,&hIcon1,&hIcon2,1); MessageBox(NULL,CString(buf),_T(""),MB_OK); } } } //如果是目录,则递归调用,列举下级目录 if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) { TRACE(_T("")); ListAllFileInDrectory(szFullPath); } } while(FindNextFile(hListFile, &FindFileData)); } return 0; } /* ************************************ \* bool GetShortCutFile(WCHAR* ShortcutFile,WCHAR* buf,int nSize) \* 功能 获取快捷方式所指向的原路径 * \* 参数 ShortcutFile:快捷方式全路径 * \* 返回值 **************************************/ bool CShellFile::GetShortCutFile(WCHAR* ShortcutFile,WCHAR* buf,int nSize) { HRESULT hres; IShellLink *psl; IPersistFile *ppf; WIN32_FIND_DATA fd; hres = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER, IID_IShellLink,(void**)&psl); if(!SUCCEEDED(hres)) return false; hres = psl->QueryInterface(IID_IPersistFile,(void**)&ppf); if(SUCCEEDED(hres)) { //wchar_t wsz[MAX_PATH]; //buffer for Unicode string //MultiByteToWideChar(CP_ACP,0,ShortcutFile,-1,wsz,MAX_PATH); //hres = ppf->Load(wsz,STGM_READ); hres = ppf->Load(ShortcutFile,STGM_READ); if(SUCCEEDED(hres)) hres = psl->GetPath(buf,nSize,&fd,0); ppf->Release(); } psl->Release(); return SUCCEEDED(hres); }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有