设为首页 加入收藏

TOP

vc在指定目录生成快捷方式
2015-07-22 17:34:53 】 浏览:1304
Tags:指定 目录 生成 快捷 方式

一、首先要获得不同目录的路径

char chDesktopPath[MAX_PATH] = {0};  
SHGetSpecialFolderPathA(NULL,chDesktopPath,CSIDL_DESKTOP,0);//获取当前用户桌面路径

通过改变上面函数的第三个参数来获取

第三个参数可以为:

CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY,

CSIDL_DRIVES, CSIDL_FONTS, CSIDL_NETHOOD, CSIDL_NETWORK, CSIDL_PERSONAL,

CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_STARTMENU,

CSIDL_STARTUP, CSIDL_TEMPLATES

二、获取到路径之后,就可以在对应的路径下生成快捷方式

下面函数的解析:

BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName, 
LPCTSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)

lpszFileName:指定生成快捷方式的文件,如果为NULL则是当前进程的快捷方式

lpszLnkFileDir:指定快捷方式生成的牡蛎,不能为NULL

lpszLnkFileName:快捷方式的名称,后缀名为.lnk,不能为NULL

lpszWorkDir:工作目录,一般设置为NULL

wHotkey:对快捷方式设置快捷键,MAKEWORD(VK_F10, HOTKEYF_CONTROL)或者0表示不设置

lpszDescription:备注情况

iShowCmd:显示方式,可以为SW_SHOWNORMAL等等


调用函数方式例如:CreateFileShortcut(NULL, CA2T(chDesktopPath), _T("进程名称.lnk") ,NULL,MAKEWORD(VK_F10, HOTKEYF_CONTROL), _T("备注内容"));

BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir, LPCTSTR lpszLnkFileName, 
	LPCTSTR 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; } //目标 if (lpszFileName == NULL) pLink->SetPath(_wpgmptr); else pLink->SetPath(lpszFileName); //工作目录 if (lpszWorkDir != NULL) pLink->SetPath(lpszWorkDir); //快捷键 if (wHotkey != 0) pLink->SetHotkey(wHotkey); //备注 if (lpszDescription != NULL) pLink->SetDescription(lpszDescription); //显示方式 pLink->SetShowCmd(iShowCmd); //快捷方式的路径 + 名称 char szBuffer[MAX_PATH]; std_string strLinkFileDir = lpszLnkFileDir; std_string strLinkFileName = lpszLnkFileName; if (lpszLnkFileName != NULL) { sprintf(szBuffer, "%s\\%s",strLinkFileDir.c_str(), strLinkFileName.c_str()); int x=1; } else { //没有指定名称,就从取指定文件的文件名作为快捷方式名称。 char* szModule = new char[_MAX_PATH]; GetModuleFileNameA(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径 char *pstr; if (lpszFileName != NULL) pstr = strrchr(CT2A(lpszFileName), '\\'); else pstr = strrchr(_pgmptr, '\\'); if (pstr == NULL) { ppf->Release(); pLink->Release(); return FALSE; } //注意后缀名要从.exe改为.lnk sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, pstr); int nLen = strlen(szBuffer); szBuffer[nLen - 3] = 'l'; szBuffer[nLen - 2] = 'n'; szBuffer[nLen - 1] = 'k'; } //保存快捷方式到指定目录下 WCHAR wsz[MAX_PATH]; //定义Unicode字符串 MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH); hr = ppf->Save(wsz, TRUE); ppf->Release(); pLink->Release(); return SUCCEEDED(hr); }

 
 

 

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇vc6.0项目到vc2013移植记录 下一篇VC读取大文件之创建文件映射及文..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }