创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)
来源:互联网 发布:广数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")
startpin和startunpin是相对应的
1 0
- 创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)
- 如何创建快捷方式并添加到开始菜单、桌面、任务栏....
- 创建快捷方式到桌面、任务栏、开始菜单、快速启动栏、程序组中
- InnoSetup快速入门(三):添加安装文件并创建开始菜单快捷方式
- Asp.Net-创建网站的快捷方式到桌面,开始菜单,收藏夹
- c#创建快捷方式到快速启动栏
- 添加“显示桌面”到快速启动栏
- Qt之创建桌面和开始菜单快捷方式
- Qt创建桌面和开始菜单快捷方式
- NSIS 附加快捷方式到开始菜单、桌面、任务栏
- 在快速启动栏和桌面创建快捷方式(代码片段)
- win10 中添加快捷方式到开始菜单
- 在桌面和快速启动中创建快捷方式
- (转)Winform 创建桌面快捷方式并开机启动
- (转)Winform 创建桌面快捷方式并开机启动
- Android创建桌面快捷方式并像启动Activity传递参数
- Android创建桌面快捷方式并像启动Activity传递参数
- 如何添加显示桌面到快速启动栏【Windows XP】?
- 微信小程序传值
- Linux Apache2.2配置CGI
- HDU 1566 Color the ball
- 数据库范式
- sql之left join、right join、inner join的区别
- 创建快捷方式 (并添加到快速启动栏 、桌面、开始菜单)
- nc65用友uap开发节点通过按钮调用打开另外一个节点并传数据跳编辑态(推单)
- Bmob+融云,node.js获取token
- Intent详解
- iphone分辨率中的scale参数
- intellij idea 导入maven编译好的spark源码
- javascript解析问号传参url参数
- truncate和delete、trop之间有什么区别?
- Mysql Explain 详解