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); 
} 
//创建快捷方式 
BOOL CreateLink (LPSTR szPath,LPSTR szLink)
/*szPath 快捷方式的目标应用程序名
szLink快捷方式的数据文件名(*.lnk) */
{ 
    HRESULT hres ; 
    IShellLink * psl ; 
    IPersistFile* ppf ; 
    WORD wsz[ MAX_PATH] ; 
    ////初始化COM 
    CoInitialize (NULL); 
   //创建一个IShellLink实例 
   hres = CoCreateInstance( CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER, IID_IShellLink, 
(void **)&psl) ; 
   if( FAILED( hres)) 
   { 
      CoUninitialize (); 
      return FALSE ; 
   } 
   //设置目标应用程序 
   psl -> SetPath( szPath) ; 
//设置快捷键(此处设为Shift+Ctrl+'R') 
// psl -> SetHotkey( MAKEWORD( 'R', 
// HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ; 
char* p; 
for( p=szPath+lstrlen(szPath)-1; *p != '//'; p--); 
   *p='/0'; 
   psl -> SetWorkingDirectory(szPath); 
   //从IShellLink获取其IPersistFile接口 
   //用于保存快捷方式的数据文件 (*.lnk) 
   hres = psl -> QueryInterface( IID_IPersistFile, (void**)&ppf) ; 
   if( FAILED( hres)) 
   { 
      CoUninitialize (); 
      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( ) ; 
   CoUninitialize (); 
   return TRUE; 
} 
void CreateThisAppShortcut() 
{ 
    char szPath[MAX_PATH]=""; //快捷方式的目标应用程序名 
    char szLink[MAX_PATH]=""; //快捷方式的数据文件名 
    ////桌面快捷方式 
    GetModuleFileName(NULL, szPath, MAX_PATH); 
    GetWindowsDirectory(szLink, MAX_PATH); 
    if(szLink[lstrlen(szLink)-1] == '//') 
       lstrcat(szLink, "Desktop//EStk接收设置.lnk"); 
    else 
        lstrcat(szLink, "//Desktop//EStk接收设置.lnk"); 
    // 创建快捷方式 
    if(!CreateLink( szPath, szLink) ) 
         return; 
    // 通知shell有关变化 
    NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,szLink) ; 
    ////快速启动快捷方式 
    GetModuleFileName(NULL, szPath, MAX_PATH); 
    GetWindowsDirectory(szLink, MAX_PATH); 
    if(szLink[lstrlen(szLink)-1] == '//') 
        lstrcat(szLink, "Application Data//Microsoft//Internet Explorer//Quick Launch//EStk接收设置.lnk"); 
    else 
        lstrcat(szLink, "//Application Data//Microsoft//Internet Explorer//Quick Launch//EStk接收设置.lnk"); 
     if(!CreateLink( szPath, szLink) ) 
        return; 
    NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT, szLink) ; 
}
 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号