设为首页 加入收藏

TOP

12.1.4 创建/删除快捷方式的技巧
2013-10-07 00:15:44 来源: 作者: 【 】 浏览:68
Tags:12.1.4 创建 删除 快捷 方式 技巧

12.1.4  创建/删除快捷方式的技巧

1.问题阐述

Windows的快捷方式实际上是一个带有扩展名LNK的数据文件,快捷方式中包括所指对象的大量的信息,如目标对象的路径和名称,工作目录,要传递的命令行参数,运行时的初始显示状态,图标及其快捷键等。通过在快捷方式上单击鼠标右键并在弹出菜单中选择【属性】命令可以观察该快捷方式的这些性质。

快捷方式的数据文件如果存放在C:\Windows\Desktop子目录下,这个快捷方式就会显示在桌面上,而如果存放在C:\Windows\Start Menu\Programs子目录下,这个快捷方式就会作为【开始】菜单的一个菜单项出现。

在操作系统中,通过手工操作建立这些应用程序的快捷方式并不复杂,在此不再赘述,在应用程序中如何完成上述的工作呢?

2.实现技巧

Windows外壳(Shell)的快捷方式是以OLE技术的组件对象模型COM(Component ObjectModal)为基础而设计的。利用COM模型,一个应用程序可以调用另一应用程序的某些功能。创建Windows的快捷方式比较容易,首先利用OLE通过调用CoCreateInstance()函数建立一个IID_IShellLink实例,并同时得到其接口指针。利用这个接口指针可以对其各项属性进行设置。为了使这些信息以快捷方式的数据文件(*.lnk)格式保存起来,还需要从IID_IShellLink对象取得其IID_IPersistFile接口指针,以便于调用其成员函数Save()保存前面设置的信息。

3.实例代码

本实例演示了如何利用IshellLink接口创建快捷方式。创建一个基于对话框的工程,工程名为ShortCut。

快捷方式生成代码:

void CShortCutDlg::OnCtreateBtn() 
{
GetDlgItemText(IDC_EDIT2,m_strLnkPath);
if(m_strLnkPath == "")
{
MessageBox("请输入快捷方式的路径");
return ;
}
CreateShortCut((LPCTSTR)(m_strDesPath),(LPCTSTR)m_strLnkPath);
}

创建快捷方式的代码:

/************************************************************************/
/* 作用:建立块捷方式
/* 参数 lpExeName:EXE 文件全路径名
/* 参数 lpLinkPath:快捷方式文件全路径名
/*
/************************************************************************/
void CShortCutDlg::CreateShortCut(LPCTSTR lpExeName,LPCTSTR lpLinkPath)
{
IShellLink * psl = NULL;
IPersistFile * ppf = NULL;
 HRESULT hr = ::CoCreateInstance( 
CLSID_ShellLink,     
NULL,                
CLSCTX_INPROC_SERVER,
IID_IShellLink,      
(LPVOID *)&psl );      // 获取接口实例
 if (SUCCEEDED(hr))
{
psl->SetPath( lpExeName );     // 全路径程序名
psl->SetIconLocation("moon_ie.ico",0);
psl -> SetHotkey( MAKEWORD( 'X', HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;
      psl->SetDescription("create a short cut");
hr = psl->QueryInterface(    // 查找持续性文件接口指针
IID_IPersistFile,        // 持续性接口 IID
(LPVOID *)&ppf
);      // 得到接口指针
  if ( SUCCEEDED(hr) )
{
USES_CONVERSION;     
ppf->Save( T2COLE( lpLinkPath ), TRUE );  // 保存
}
}
if ( ppf )
ppf->Release();
if ( psl ) 
psl->Release();
}
选择快捷方式的目标文件:
void CShortCutDlg::OnFindFileBtn() 
{
CFileDialog  file(TRUE,".exe",".exe",OFN_HIDEREADONLY | OFN_
OVERWRITEPROMPT,"文件(*.exe)|*.exe||",NULL);
if(file.DoModal() == IDOK)
{
m_strDesPath = file.GetPathName();
SetDlgItemText(IDC_EDIT1,m_strDesPath);
}
}

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.1.2 CLSID和ProgID相互转换 下一篇12.1.1 COM接口

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: