如何用MFC建立捷徑

來源:互聯網
上載者:User

 

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) ;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.