创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)

来源:互联网 发布:广数980锥度螺纹编程 编辑:程序博客网 时间:2024/05/21 15:13

首先需要获取三个路径 :桌面路径 、快速启动栏路径、 开始->程序组路径

//得到当前桌面路径  BOOL GetDesktopPath(char *pszDesktopPath)  {  LPITEMIDLIST  ppidl = NULL;   if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK)  {  BOOL flag = SHGetPathFromIDList(ppidl, pszDesktopPath);  CoTaskMemFree(ppidl);  return flag;  }  return FALSE;  }     //得到快速启动栏的路径  BOOL GetIEQuickLaunchPath(char *pszIEQueickLaunchPath)  {     LPITEMIDLIST  ppidl;              if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)  {  BOOL flag = SHGetPathFromIDList(ppidl, pszIEQueickLaunchPath);  strcat(pszIEQueickLaunchPath, "\\Microsoft\\Internet Explorer\\Quick Launch");  CoTaskMemFree(ppidl);  return flag;  }  return FALSE;  }  //得到 开始->程序组 的路径  BOOL GetProgramsPath(char *pszProgramsPath)  {  LPITEMIDLIST  ppidl;   if (SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &ppidl) == S_OK)  {  BOOL flag = SHGetPathFromIDList(ppidl, pszProgramsPath);  CoTaskMemFree(ppidl);  return flag;  }  return FALSE;  }  
这样返回的pszProgramsPath就是指当前获取的路径


程序的思路:得到路径,在当前路径下创建exe相对应的快捷方式,并通过ShellExecute函数来锁定到快速启动栏或开始菜单


/* 函数功能:对指定文件在指定的目录下创建其快捷方式 函数参数: lpszFileName    指定文件,为NULL表示当前进程的EXE文件。 lpszLnkFileDir  指定目录,不能为NULL。 lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。 wHotkey         为0表示不设置快捷键 pszDescription  备注 iShowCmd        运行方式,默认为常规窗口 */  BOOL CreateFileShortcut(LPCSTR lpszFileName, LPCSTR lpszLnkFileDir, LPCSTR lpszLnkFileName, LPCSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)  {  if (lpszLnkFileDir == NULL)  return FALSE;  HRESULT hr;  IShellLink     *pLink;  //IShellLink对象指针  IPersistFile   *ppf; //IPersisFil对象指针  //创建IShellLink对象  hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);  if (FAILED(hr))  return FALSE;  //从IShellLink对象中获取IPersistFile接口  hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);  if (FAILED(hr))  {  pLink->Release();  return FALSE;  }      //获取当前exe所在路径TCHAR exeFullPath[MAX_PATH]; // MAX_PATHGetModuleFileName(NULL,exeFullPath,MAX_PATH);//目标  if (lpszFileName == NULL)  pLink->SetPath(_pgmptr);  else  pLink->SetPath(exeFullPath); //工作目录  if (lpszWorkDir != NULL)  pLink->SetWorkingDirectory(lpszWorkDir);  //快捷键  if (wHotkey != 0)  pLink->SetHotkey(wHotkey);  //备注  if (lpszDescription != NULL)  pLink->SetDescription(lpszDescription);  //显示方式  pLink->SetShowCmd(iShowCmd);  //快捷方式的路径 + 名称  char szBuffer[MAX_PATH];  if (lpszLnkFileName != NULL) //指定了快捷方式的名称  sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, lpszLnkFileName);  else     {  //没有指定名称,就从取指定文件的文件名作为快捷方式名称。  //char *pstr;  char *buf = new char[strlen(lpszFileName)+1];strcpy(buf, lpszFileName);  if (buf == NULL)  {     ppf->Release();  pLink->Release();  return FALSE;  }  //注意后缀名要从.exe改为.lnk  sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, buf);  int nLen = strlen(szBuffer);//char lkName = ;strcat(szBuffer, ".lnk");}  //保存快捷方式到指定目录下  WCHAR  wsz[MAX_PATH];  //定义Unicode字符串  MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);  hr = ppf->Save(wsz, TRUE);  ppf->Release();  pLink->Release();  CoUninitialize(); //释放com接口return SUCCEEDED(hr);  }  

下面说一下调用 :


char  szPath[MAX_PATH];  CoInitialize(NULL);  GetDesktopPath(szPath);//GetIEQuickLaunchPath(szPath);//GetProgramsPath(szPath);if (!CreateFileShortcut(_T("QQMusicEx"), szPath, NULL, NULL, 0 , NULL)) return ;else{//strcat(szPath,"\\QQMusicEx.lnk");//ShellExecute(NULL,_T("TaskbarPin"), szPath, NULL, NULL, SW_SHOW); // 锁定程序到任务栏//ShellExecute(NULL,_T("startpin"), szPath, NULL, NULL, SW_SHOW); // 锁定程序到开始菜单//startpin}

红色代表桌面快捷方式,下面的else注释掉 

蓝色放开注释,else里面的strcat跟着一起放开

紫色放开注释,else操作同上


注意:1.  需要注意的是 在创建开解方式的时候需要添加头文件 

#include <shlobj.h>#pragma comment(lib, "shell32.lib")


2. TaskbarPin是锁定  TaskbarUnpin是解锁 

    startpin和startunpin是相对应的




1 0
原创粉丝点击