vc在指定目录生成快捷方式

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

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);elsepLink->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), '\\');elsepstr = strrchr(_pgmptr, '\\');if (pstr == NULL){ppf->Release();pLink->Release();return FALSE;}//注意后缀名要从.exe改为.lnksprintf(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);}

向上攀爬的。

vc在指定目录生成快捷方式

相关文章:

你感兴趣的文章:

标签云: