Keep on going, never give up.

如何在VC++中创建快捷方式

Windows快捷方式是扩展名为*.lnk的数据文件,一般是在桌面和开始菜单中。本文介绍如何在VC中创建应用程序快捷方式和INTERNET快捷方式。创建普通快捷方式非常简单。首先调用CoCreateInstance()函数创建一个IID_IShellLink实例,得到其接口指针。 利用接口指针对其快捷方式的属性进行设置。再从IID_IShellLink对象取得其IID_IPersistFile接口指针,调用函数Save() 保存前面设置的信息即可。如果要想删除快捷方式或创建和删除文件夹,只需要调用文件操作函数SHFileOperation()进行操作即可。完成上述操 作之后,调用SHChangeNotify()函数通知Windows外壳有关变化以使之及时更新其显示状态。

如需要创建Internet快捷方式,方法也类似处理,不过是创建IID_InternetShortcut实例。下面直接附上两个例子。

示例1

//创建普通快捷方式

BOOL CModieDlg::fnCreateLink ( )
{

    LPCSTR pszPath,pszLink;

    pszPath="C:\123.exe";//目标程序名

    pszLink="c:\\123.url";//快捷方式名

    HRESULT hres=NULL;

    IShellLink * psl ;

    IPersistFile* ppf ;

    WCHAR   wsz[MAX_PATH]; //   buffer   for   Unicode   string 

    hres = CoCreateInstance( CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER, IID_IShellLink,(void **)&psl) ;

    if(NULL ==hres)        return FALSE ;
   
    psl->SetPath(pszPath) ;//设置路径

    psl->SetHotkey(MAKEWORD('A',HOTKEYF_CONTROL)) ;  //设置快捷键、热键

    hres = psl -> QueryInterface( IID_IPersistFile,    (void**)&ppf);//获取IPersistFile接口

    if(NULL ==hres)        return FALSE ;

    MultiByteToWideChar(CP_ACP,0,pszLink,-1,wsz,MAX_PATH);

    hres = ppf -> Save( pszLink, STGM_READWRITE) ;//保存快捷方式

    ppf->Release();//释放IPersistFile和IShellLink接口

        psl->Release();

        // 通知SHELL变化
        SHChangeNotify( ....) ;//从略,具体可以参考该函数定义,一般创建后通知本目录和父目录即可。

         return TRUE;
}

//删除快捷方式
BOOL CModieDlg::fnDeleteLink( LPSTR lpszShortcut)
{

        SHFILEOPSTRUCT fost ;

        ZeroMemory( &fos, sizeof(fost )) ;

        fost .hwnd = HWND_DESKTOP ;

        fost .wFunc = FO_DELETE ;//操作代码

        fost .pFrom = lpszShortcut;

        fost .pTo = NULL ;

        fost .fFlags = FOF_SILENT | FOF_ALLOWUNDO ;

        //删除快捷方式

        if( 0 != SHFileOperation( &fost ))        return FALSE ;

        return TRUE ;
}

示例2:

//创建INTERNET快捷方式

#include   <intshcut.h> //一定要包含这个文件

void CModieDlg::OnButton1()

{

    // TODO: Add your control notification handler code here

    HRESULT   hRes; 

    IUniformResourceLocator   *pURL   =   NULL; 

    LPCSTR pszURL,pszLinkFile;

    pszURL="http://www.metsky.com";

    pszLinkFile="c:\\metsky.url";

    //Create   an   IUniformResourceLocator   object 

    hRes =CoCreateInstance(CLSID_InternetShortcut,NULL,CLSCTX_INPROC_SERVER,IID_IUniformResourceLocator,(LPVOID*) &pURL); 

    if(SUCCEEDED(hRes)) 

    { 

        IPersistFile   *pPF   =   NULL;

        hRes   =pURL->SetURL(pszURL,   0);

        if   (SUCCEEDED(hRes)) 

        { 

          WCHAR   wsz[MAX_PATH]; //   buffer   for   Unicode   string 

          //Ensure   that   the   string   consists   of   ANSI   characters. 

          MultiByteToWideChar(CP_ACP,0,pszLinkFile,-1,wsz,MAX_PATH);

          hRes   =   pURL->QueryInterface(IID_IPersistFile,   (void   **)&pPF); 

          if(SUCCEEDED(hRes)) 

          {       

              //   Save   the   shortcut   via   the   IPersistFile::Save   member   function. 

              hRes   =pPF->Save(wsz,TRUE);

              //   Release   the   pointer   to   IPersistFile. 

              pPF->Release(); 

          } 

      } 

      //   Release   the   pointer   to   IUniformResourceLocator 

      pURL->Release(); 

    }

}

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.