创建桌面快捷图标和创建开始菜单组
CFileDialog dlg(FALSE,"可执行文件", "*.EXE", OFN_HIDEREADONLY, "可执行程序|*.exe||", NULL);
if (dlg.DoModal() == IDOK)
{
pathname = dlg.GetPathName(); //取得文件全路径
strname = dlg.GetFileName(); //取得文件的名字
}
//初始化
CoInitialize (NULL);
//建立桌面快捷图标函数
void CreateDesttop(char *filepath)
{
strcat(filepath,"\\Windows秘书.exe");
LPITEMIDLIST pidlBeginAt;
char szLink[MAX_PATH]="";//快捷方式的数据文件名
// 取得桌面的PIDL
SHGetSpecialFolderLocation( HWND_DESKTOP,CSIDL_DESKTOPDIRECTORY, &pidlBeginAt) ;
// 把PIDL转换为路径名
SHGetPathFromIDList( pidlBeginAt, szLink) ;
strcat(szLink,"\\Windows秘书.lnk");
IShellLink * psl ;
IPersistFile* ppf ;
WORD wsz[ MAX_PATH] ;
//创建一个IShellLink实例
CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl)
;
//设置目标应用程序
psl -> SetPath( filepath) ;
//设置快捷键(此处设为Shift+Ctrl+'R')
psl -> SetHotkey( MAKEWORD( 'Q', HOTKEYF_SHIFT |HOTKEYF_CONTROL|HOTKEYF_ALT)) ;
//从IShellLink获取其IPersistFile接口
//用于保存快捷方式的数据文件 (*.lnk)
psl -> QueryInterface( IID_IPersistFile, (void**)&ppf) ;
// 确保数据文件名为ANSI格式
MultiByteToWideChar( CP_ACP, 0, szLink, -1, wsz, MAX_PATH) ;
//调用IPersistFile::Save
//保存快捷方式的数据文件 (*.lnk)
ppf -> Save( wsz, STGM_READWRITE) ;
//释放IPersistFile和IShellLink接口
ppf -> Release( ) ;
psl -> Release( ) ;
SHChangeNotify( SHCNE_Create|SHCNE_INTERRUPT,SHCNF_FLUSH | SHCNF_PATH, szLink,0);
//取得szPath的父目录
char* p;
for( p=szLink+lstrlen(szLink)-1; *p != '\\'; p--);
*p='\0';
SHChangeNotify(SHCNE_UpdateDIR |SHCNE_INTERRUPT,SHCNF_FLUSH | SHCNF_PATH,szLink,0);
}
//创建开始菜单组的函数
void CWindowsDlg::CreateStarMenu(char *filepath)
{
LPITEMIDLIST pidlBeginAt;
char szPath[ MAX_PATH] ;
// 取得开始菜单的PIDL
SHGetSpecialFolderLocation( HWND_DESKTOP, CSIDL_STARTMENU, &pidlBeginAt) ;
SHGetPathFromIDList( pidlBeginAt, szPath) ;// 把PIDL转换为路径名
strcat(szPath,"\\宇光软件");
if( !CreateDirectory( szPath, NULL))return ;
SHChangeNotify( SHCNE_MKDIR|SHCNE_INTERRUPT, 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);
strcat(filepath,"\\Windows秘书.exe");
strcat(szPath,"\\宇光软件\\Windows秘书.lnk");
IShellLink * psl ;
IPersistFile* ppf ;
WORD wsz[ MAX_PATH] ;
//创建一个IShellLink实例
CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl)
;
//设置目标应用程序
psl -> SetPath( filepath) ;
//设置快捷键(此处设为Shift+Ctrl+'Y')
psl -> SetHotkey( MAKEWORD( 'Y', HOTKEYF_SHIFT |HOTKEYF_CONTROL|HOTKEYF_ALT)) ;
//从IShellLink获取其IPersistFile接口
//用于保存快捷方式的数据文件 (*.lnk)
psl -> QueryInterface( IID_IPersistFile, (void**)&ppf) ;
// 确保数据文件名为ANSI格式
MultiByteToWideChar( CP_ACP, 0, szPath, -1,wsz, MAX_PATH) ;
//调用IPersistFile::Save
//保存快捷方式的数据文件 (*.lnk)
ppf -> Save( wsz, STGM_READWRITE) ;
//释放IPersistFile和IShellLink接口
ppf -> Release( ) ;
psl -> Release( ) ;
SHChangeNotify( SHCNE_Create|SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH, szPath,0);
//取得szPath的父目录
for( p=szPath+lstrlen(szPath)-1; *p != '\\'; p--);
*p='\0';
SHChangeNotify(SHCNE_UpdateDIR |SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH,szPath,0);
}
void OnDestroy()
{
CoUninitialize();
}
|