如何用MFC创建快捷方式

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值