AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

在应用程序中创建快捷方式

51自学网 2015-08-30 http://www.wanshiok.com

 

  CNameDlg name_dlg;

  if(name_dlg.DoModal() == IDCANCEL)  

    return FALSE ;

  //把快捷方式名和扩展名.LNK添加到路径名后

  //形成完整的快捷方式数据文件名

  wsprintf(szPath+lstrlen(szPath),"//%s.lnk",

        name_dlg.m_strName) ;

  return TRUE ;

}

//创建快捷方式

BOOL CreateLink (

  LPSTR szPath,//快捷方式的目标应用程序名

  LPSTR szLink)//快捷方式的数据文件名(*.lnk)

{

HRESULT hres ;

IShellLink * psl ;

IPersistFile* ppf ;

WORD wsz[ MAX_PATH] ;

  //创建一个IShellLink实例

  hres = CoCreateInstance( CLSID_ShellLink, NULL,

    CLSCTX_INPROC_SERVER, IID_IShellLink,

    (void **)&psl) ;

if( FAILED( hres))

    return FALSE ;

  //设置目标应用程序

  psl -> SetPath( szPath) ;

  //设置快捷键(此处设为Shift+Ctrl+'R')

  psl -> SetHotkey( MAKEWORD( 'R',

      HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;

  //从IShellLink获取其IPersistFile接口

  //用于保存快捷方式的数据文件 (*.lnk)

  hres = psl -> QueryInterface( IID_IPersistFile,

      (void**)&ppf) ;

if( FAILED( hres))

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

return TRUE;

}

//删除文件夹

BOOL DeleteFolder( LPSTR pszFolder)

{

  SHFILEOPSTRUCT fos ;

  

  ZeroMemory( &fos, sizeof( fos)) ;

  fos.hwnd = HWND_DESKTOP;

  fos.wFunc = FO_DELETE ;

  fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ;

  fos.pFrom = pszFolder ;



  // 删除文件夹及其内容

  if( 0 != SHFileOperation( &fos))

    return FALSE ;

  return TRUE;

}

//取得要删除的快捷方式

BOOL GetShortcutDel (

    LPSTR lpszInitDir,//选择文件的开始目录

    LPSTR lpszShortcut)//快捷方式名

{

  OPENFILENAME ofn ;

  char szFilter[] = "Shortcuts/0*.lnk/0" ;



  ZeroMemory(&ofn,sizeof( OPENFILENAME));

  ofn.lStructSize = sizeof( OPENFILENAME) ;

  ofn.hwndOwner = HWND_DESKTOP ;

  ofn.lpstrFilter = szFilter ;

  ofn.nFilterIndex = 0 ;

  ofn.nMaxFile = MAX_PATH ;

  ofn.lpstrTitle = "请选择要删除的快捷方式:" ;

  ofn.lpstrFile = lpszShortcut;

  ofn.lpstrInitialDir = lpszInitDir ;

  ofn.Flags = OFN_FILEMUSTEXIST |

    OFN_PATHMUSTEXIST | OFN_EXPLORER |

    OFN_NODEREFERENCELINKS ;

  //文件浏览

  if(! GetOpenFileName( &ofn))//选择了取消按钮

    return FALSE ;

  return TRUE ;

}

//删除快捷方式的数据文件 (*.lnk)

BOOL DeleteLink( LPSTR lpszShortcut)

{

  SHFILEOPSTRUCT fos ;



  ZeroMemory( &fos, sizeof(fos)) ;

  fos.hwnd = HWND_DESKTOP ;

  fos.wFunc = FO_DELETE ;

  fos.pFrom = lpszShortcut;

  fos.pTo = NULL ;

  fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ;

  //删除快捷方式(*.lnk)

  if( 0 != SHFileOperation( &fos))

    return FALSE ;

  return TRUE ;

}

// 通知shell有关变化

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

}

///////////////////////////////////////////////////

// CSortCutDlg dialog

CSortCutDlg::CSortCutDlg(CWnd* pParent /*=NULL*/)

  : CDialog(CSortCutDlg::IDD, pParent)

{

  //{{AFX_DATA_INIT(CSortCutDlg)

  //把圆形按钮“桌面”设为选中状态

  m_nLocation = 0;

  ……

}

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:Windows Socket API 使用经验  下一篇:利用VC++编程实现程序自动启动