MFC添加快捷方式和删除快捷方式
来源:互联网 发布:软件性能测试视频 编辑:程序博客网 时间:2024/05/19 07:26
http://download.csdn.net/download/thanklife/9938163 项目工程在此
//浏览文件夹BOOL CShortCutDlg::BrowseForFolder( LPITEMIDLIST pidlRoot,//浏览开始处的PIDL LPITEMIDLIST *ppidlDestination, //浏览结束时所选择的PIDL LPCSTR lpszTitle)//浏览对话框中的提示文字{ BROWSEINFO BrInfo ; ZeroMemory( &BrInfo, sizeof(BrInfo)) ; BrInfo.hwndOwner = HWND_DESKTOP ; BrInfo.pidlRoot = pidlRoot ; BrInfo.lpszTitle = lpszTitle ; //浏览文件夹 *ppidlDestination= SHBrowseForFolder(&BrInfo); //用户选择了取消按钮 if(NULL == *ppidlDestination) return FALSE ; return TRUE ;}//取得快捷方式的目标应用程序名BOOL CShortCutDlg::SelectMenuItem( LPSTR szFileName){ OPENFILENAME ofn ; static CHAR szFilter[] = "Programs\0*.exe\0" ; ZeroMemory(&ofn, sizeof( OPENFILENAME)) ; ofn.lStructSize = sizeof( OPENFILENAME) ; ofn.hwndOwner = HWND_DESKTOP; ofn.lpstrFilter = szFilter ; ofn.nFilterIndex = 0 ; ofn.nMaxFile = MAX_PATH ; ofn.lpstrTitle = "请选择目标应用程序:" ; ofn.lpstrFile = szFileName ; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER ; //文件浏览 if(!GetOpenFileName( &ofn))//选择了取消按钮 return FALSE ; return TRUE ;}//取得要创建的快捷方式的名字BOOL CShortCutDlg::GetShortcutCrt(LPSTR szPath){ LPITEMIDLIST pidlBeginAt, pidlDestination ; // 取得开始菜单或桌面的PIDL SHGetSpecialFolderLocation( HWND_DESKTOP, nBeginAt, &pidlBeginAt) ; // 取得要创建的快捷方式所在的位置 if( !BrowseForFolder(pidlBeginAt, &pidlDestination, "请选择快捷方式所在的位置:")) return FALSE ; // 把PIDL转换为路径名 SHGetPathFromIDList( pidlDestination, szPath) ; // 取得快捷方式名称 CNameDlg name_dlg;if(name_dlg.DoModal() == IDCANCEL) return FALSE ; //把快捷方式名和扩展名.LNK添加到路径名后 //形成完整的快捷方式数据文件名 wsprintf(szPath+lstrlen(szPath),"\\%s.lnk", name_dlg.m_strName) ; return TRUE ;}//创建快捷方式BOOL CShortCutDlg::CreateLink ( LPSTR szPath,//快捷方式的目标应用程序名 LPSTR szLink)//快捷方式的数据文件名(*.lnk){HRESULT hres ;IShellLink * psl ;IPersistFile* ppf ;WCHAR wsz[ MAX_PATH] ; //创建一个IShellLink实例 hres = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl) ;if( FAILED( hres)) return FALSE ; //设置目标应用程序 psl -> SetPath( szPath) ; //设置快捷键(此处设为Shift+Ctrl+'R') psl -> SetHotkey( MAKEWORD( 'R',HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ; //从IShellLink获取其IPersistFile接口 //用于保存快捷方式的数据文件 (*.lnk) hres = psl -> QueryInterface( IID_IPersistFile,(void**)&ppf) ;if( FAILED( hres)) return FALSE ;// 确保数据文件名为ANSI格式MultiByteToWideChar( CP_ACP, 0, szLink, -1, wsz, MAX_PATH) ; //调用IPersistFile::Save //保存快捷方式的数据文件 (*.lnk)hres = ppf -> Save( wsz, STGM_READWRITE) ; //释放IPersistFile和IShellLink接口ppf -> Release( ) ;psl -> Release( ) ;return TRUE;}BOOL CShortCutDlg::DeleteFolder( LPSTR pszFolder){ SHFILEOPSTRUCT fos ; ZeroMemory( &fos, sizeof( fos)) ; fos.hwnd = HWND_DESKTOP; fos.wFunc = FO_DELETE ; fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ; fos.pFrom = pszFolder ; // 删除文件夹及其内容 if( 0 != SHFileOperation( &fos)) return FALSE ; return TRUE;}//取得要删除的快捷方式BOOL CShortCutDlg::GetShortcutDel ( LPSTR lpszInitDir,//选择文件的开始目录 LPSTR lpszShortcut)//快捷方式名{ OPENFILENAME ofn ; char szFilter[] = "Shortcuts\0*.lnk\0" ; ZeroMemory(&ofn,sizeof( OPENFILENAME)); ofn.lStructSize = sizeof( OPENFILENAME) ; ofn.hwndOwner = HWND_DESKTOP ; ofn.lpstrFilter = szFilter ; ofn.nFilterIndex = 0 ; ofn.nMaxFile = MAX_PATH ; ofn.lpstrTitle = "请选择要删除的快捷方式:" ; ofn.lpstrFile = lpszShortcut; ofn.lpstrInitialDir = lpszInitDir ; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NODEREFERENCELINKS ; //文件浏览 if(! GetOpenFileName( &ofn))//选择了取消按钮 return FALSE ; return TRUE ;}//删除快捷方式的数据文件 (*.lnk)BOOL CShortCutDlg::DeleteLink( LPSTR lpszShortcut){ SHFILEOPSTRUCT fos ; ZeroMemory( &fos, sizeof(fos)) ; fos.hwnd = HWND_DESKTOP ; fos.wFunc = FO_DELETE ; fos.pFrom = lpszShortcut; fos.pTo = NULL ; fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ; //删除快捷方式(*.lnk) if( 0 != SHFileOperation( &fos)) return FALSE ; return TRUE ;}// 通知shell有关变化void CShortCutDlg::NotifyShell(LONG wEventId,//事件标志 LPSTR szPath)//路径{ SHChangeNotify( wEventId, SHCNF_FLUSH | SHCNF_PATH, szPath,0); //取得szPath的父目录 char* p; for( p=szPath+lstrlen(szPath)-1; *p != '\\'; p--); *p='\0'; SHChangeNotify(SHCNE_UPDATEDIR |SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH,szPath,0);}void CShortCutDlg::OnCreateGroup() {UpdateData(TRUE);if(m_nLocation==0){//设置起始文件夹为桌面nBeginAt=CSIDL_DESKTOPDIRECTORY ; }else{//设置起始文件夹为“开始”菜单nBeginAt=CSIDL_STARTMENU;}LPITEMIDLIST pidlBeginAt, pidlDestination ; char szPath[ MAX_PATH] ; // 取得开始菜单或桌面的PIDL SHGetSpecialFolderLocation( HWND_DESKTOP, nBeginAt, &pidlBeginAt) ; // 取得新建文件夹的父文件夹 if( !BrowseForFolder(pidlBeginAt , &pidlDestination, "请选择新建文件夹/菜单组的位置:")) return ; // 把PIDL转换为路径名 SHGetPathFromIDList( pidlDestination, szPath) ; //取得新建文件夹的名字 CNameDlg name_dlg; if(name_dlg.DoModal() == IDCANCEL) return; //形成完整的新建文件夹名 wsprintf(szPath+lstrlen(szPath),"\\%s", name_dlg.m_strName); //创建文件夹(子目录) if( !CreateDirectory( szPath, NULL)) { MessageBox( "创建文件夹失败!") ; return ; } // 通知shell有关变化 NotifyShell( SHCNE_MKDIR|SHCNE_INTERRUPT, szPath);}void CShortCutDlg::OnCreateItem() {UpdateData(TRUE);if(m_nLocation==0){//设置起始文件夹为桌面nBeginAt=CSIDL_DESKTOPDIRECTORY ; }else{//设置起始文件夹为“开始”菜单nBeginAt=CSIDL_STARTMENU;}char szPath[MAX_PATH]=""; //快捷方式的目标应用程序名 char szLink[MAX_PATH]=""; //快捷方式的数据文件名 // 取得快捷方式的目标应用程序名 if( !SelectMenuItem( szPath)) return ; // 取得新建快捷方式所在的文件夹 //并形成其数据文件名 if( !GetShortcutCrt( szLink)) return ; // 创建快捷方式 if(!CreateLink( szPath, szLink) ) return; // 通知shell有关变化 NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT, szLink) ;}void CShortCutDlg::OnDeleteGroup() {UpdateData(TRUE);if(m_nLocation==0){//设置起始文件夹为桌面nBeginAt=CSIDL_DESKTOPDIRECTORY ; }else{//设置起始文件夹为“开始”菜单nBeginAt=CSIDL_STARTMENU;}LPITEMIDLIST pidlBeginAt, pidlFolder ; char szPath[MAX_PATH]=""; // 取得开始菜单或桌面的PIDL SHGetSpecialFolderLocation( HWND_DESKTOP, nBeginAt, &pidlBeginAt) ; // 取得要删除的文件夹 if( !BrowseForFolder( pidlBeginAt, &pidlFolder, "请选择要删除的文件夹/菜单组:")) return ; // 把PIDL转化为路径名 SHGetPathFromIDList( pidlFolder, szPath) ; // 删除文件夹 if(!DeleteFolder( szPath)) return ; // 通知shell有关变化 NotifyShell( SHCNE_RMDIR|SHCNE_INTERRUPT, szPath) ;}void CShortCutDlg::OnDeleteItem() {UpdateData(TRUE);if(m_nLocation==0){//设置起始文件夹为桌面nBeginAt=CSIDL_DESKTOPDIRECTORY ; }else{//设置起始文件夹为“开始”菜单nBeginAt=CSIDL_STARTMENU;}LPITEMIDLIST pidlBeginAt ; char szShortcut[ MAX_PATH]="", szPath[ MAX_PATH]=""; // 取得开始菜单或桌面的PIDL SHGetSpecialFolderLocation( HWND_DESKTOP, nBeginAt, &pidlBeginAt) ; // 把PIDL转化为路径名 SHGetPathFromIDList( pidlBeginAt, szPath) ; // 取得要删除的快捷方式 if( !GetShortcutDel( szPath, szShortcut)) return ; // 删除快捷方式 if( !DeleteLink(szShortcut)) return ; // 通知SHELL有关改变 NotifyShell( SHCNE_DELETE|SHCNE_INTERRUPT, szShortcut) ;}void CShortCutDlg::OnDestroy() {CoUninitialize(); CDialog::OnDestroy();}
阅读全文
0 0
- MFC添加快捷方式和删除快捷方式
- android 添加和删除快捷方式
- Android 添加和删除快捷方式
- Android添加桌面快捷方式和删除桌面快捷方式
- android添加删除快捷方式
- Android 添加和删除桌面快捷方式
- Android代码添加快捷方式与删除快捷方式
- android添加删除桌面快捷方式
- 【Android】添加删除桌面快捷方式
- android添加删除桌面快捷方式
- Android 添加删除应用快捷方式
- 快捷方式的添加与删除
- Android应用程序添加、删除快捷方式
- VC++创建快捷方式、删除快捷方式、添加开始菜单程序组菜单
- VC++创建快捷方式、删除快捷方式、添加开始菜单程序组菜单
- 创建和删除桌面快捷方式
- 添加快捷方式
- Android 创建和删除快捷方式以及判断是否有快捷方式
- 【ggplot】复杂柱状图:自定义颜色、标签、位置、坐标轴和主题
- java的IO流复制文件和读取文件内容
- [RK3288][Android6.0] External stroage转成Internal storage
- 字体组合的10个黄金规则
- centos7安装PHP5.5
- MFC添加快捷方式和删除快捷方式
- 深入理解HTTP
- redis 主从配置
- Android.mk
- Imageloder图片加载框架
- 获取元素
- 海象金服与沐金农签署战略合作协议,共谋消费金融发展 正文 财经网微评论(0人评论) 本文来源于东方网 2017-08-17 10:03:12 我要评论(0) share 快成为第一
- 好的设计有多重要看这10个理由就知道
- 特征选择:连续特征离散化达到更好的效果