码迷,mamicode.com
首页 > 编程语言 > 详细

C++ API实现创建桌面快捷方式

时间:2018-10-13 18:17:18      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:邻居   发送   菜单   line   star   网上   ++   use   wchar_t   

  1 #include<windows.h>
  2 #include <string>
  3 #include <shellapi.h>
  4 #include <shlobj.h>
  5 #pragma  comment(lib, "shell32.lib")
  6 using namespace std;
  7 #ifdef _UNICODE
  8 typedef wstring tstring;
  9 #else
 10 typedef string tstring;
 11 #endif
 12 /*
 13 //获取相关系统路径
 14 HRESULT SHGetSpecialFolderLocation(
 15     HWND hwndOwner, int nFolder, PIDLIST_ABSOLUTE *ppidl
 16 );
 17 
 18 第一个参数表示所有者窗口句柄,一般传入NULL就可以了。
 19 第二个参数要示是一个整数id,决定哪个目录是待查找目录, 它的取值可能是
 20 CSIDL_BITBUCKET            回收站
 21 CSIDL_CONTROLS            控制面板
 22 CSIDL_DESKTOP              Windows桌面desktop;
 23 
 24 CSIDL_DESKTOPDIRECTORY   desktop的目录;
 25 CSIDL_DRIVES                我的电脑
 26 CSIDL_FONTS                 字体目录
 27 CSIDL_NETHOOD             网上邻居
 28 CSIDL_NETWORK             网上邻居virtual folder
 29 
 30 CSIDL_PERSONAL             我的文档
 31 CSIDL_PRINTERS              打印机
 32 CSIDL_PROGRAMS             程序组
 33 CSIDL_RECENT                最近打开文档
 34 CSIDL_SENDTO                发送到菜单项
 35 CSIDL_STARTMENU            快速启动菜单
 36 CSIDL_STARTUP               启动目录
 37 CSIDL_TEMPLATES            临时文档
 38 第三个参数表示一个条目标识符列表指针,可以传入一个LPITEMIDLIST类型变量,再从这个变量中得到表示路径的字符串。使用完后,要用void CoTaskMemFree(void * pv)来释放资源。
 39 */
 40 
 41 
 42 
 43 //封装的创建快捷方式API
 44 // szStartAppPath : 点击后启动的程序
 45 // szAddCmdLine : 传给main函数的lpCmdLine
 46 // szDestLnkPath : 快捷方式的保存路径
 47 // szIconPath : 快捷方式显示的图标
 48 bool CreateLinkFile(LPCTSTR szStartAppPath, LPCTSTR szAddCmdLine, LPCOLESTR szDestLnkPath, LPCTSTR szIconPath)
 49 {
 50     HRESULT hr = CoInitialize(NULL);
 51     if (SUCCEEDED(hr))
 52     {
 53         IShellLink *pShellLink;
 54         hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pShellLink);
 55         if (SUCCEEDED(hr))
 56         {
 57             pShellLink->SetPath(szStartAppPath);
 58             tstring strTmp = szStartAppPath;
 59             int nStart = strTmp.find_last_of(TEXT("/\\"));
 60             pShellLink->SetWorkingDirectory(strTmp.substr(0, nStart).c_str());
 61             pShellLink->SetArguments(szAddCmdLine);
 62             if (szIconPath)
 63             {
 64                 pShellLink->SetIconLocation(szIconPath, 0);
 65             }
 66             IPersistFile* pPersistFile;
 67             hr = pShellLink->QueryInterface(IID_IPersistFile, (void**)&pPersistFile);
 68             if (SUCCEEDED(hr))
 69             {
 70                 hr = pPersistFile->Save(( szDestLnkPath), FALSE);
 71                 if (SUCCEEDED(hr))
 72                 {
 73                     return true;
 74                 }
 75                 pPersistFile->Release();
 76             }
 77             pShellLink->Release();
 78         }
 79         CoUninitialize();
 80     }
 81     return false;
 82 }
 83 //百度的string转换wstring
 84 std::wstring s2ws(const std::string& s)
 85 {
 86     int len;
 87     int slength = (int)s.length() + 1;
 88     len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
 89     wchar_t* buf = new wchar_t[len];
 90     MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
 91     std::wstring r(buf);
 92     delete[] buf;
 93     return r;
 94 }
 95 
 96 int main()
 97 {
 98 
 99     LPITEMIDLIST lp;
100     SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
101      char lstr[100]="";
102     SHGetPathFromIDList(lp,lstr);
103     string s = lstr;
104     s += "\\CMGPAUSE.lnk";
105     CreateLinkFile("cmd.exe", "pause", s2ws(s).c_str(),"1.bmp");
106 
107 }

 

C++ API实现创建桌面快捷方式

标签:邻居   发送   菜单   line   star   网上   ++   use   wchar_t   

原文地址:https://www.cnblogs.com/wwj973/p/9783551.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!