vc删除应用程序快捷方式

本文介绍了如何使用Windows壳层API进行快捷方式的创建、删除操作,并通过SHChangeNotify函数通知Shell有关文件系统的变化。代码示例包括创建快捷方式、删除快捷方式、创建文件夹、删除文件夹的函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//删除快捷方式的数据文件   (*.lnk)
BOOL   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   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);
}
///////////////////////////////////////////////////
//   CSortCutDlg   dialog
CSortCutDlg::CSortCutDlg(CWnd*   pParent   /*=NULL*/)
:   CDialog(CSortCutDlg::IDD,   pParent)
{
//{{AFX_DATA_INIT(CSortCutDlg)
//把圆形按钮“桌面”设为选中状态
m_nLocation   =   0;
……
}
……
void   CSortCutDlg::OnCreateGroup()  
{
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   CSortCutDlg::OnCreateItem()  
{
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   CSortCutDlg::OnDeleteGroup()  
{
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   CSortCutDlg::OnDeleteItem()  
{
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   CSortCutDlg::OnDesktop()  
{
//设置起始文件夹为桌面
nBeginAt=CSIDL_DESKTOPDIRECTORY   ;  
}
void   CSortCutDlg::OnStartmenu()  
{
//设置起始文件夹为“开始”菜单
nBeginAt=CSIDL_STARTMENU;
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值