Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

绿色网站无广告
会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

在桌面建立快捷方式

来源: 未知 分享至:

本实例是《杨老师之Blog——COM组件设计与应用(四)》中的实例四,本人实现后并加以注释。

在阅读代码之前,先看一下关于“快捷方式”组件的结构示意图。


   快捷方式组件的接口结构示意图

  从结构图中可以看出,“快捷方式”组件(CLSID_ShellLink),有3个(其实不止)接口,每个接口完成一组相关功能的函数。IShellLink 接口(IID_IShellLink)提供快捷方式的参数读写功能(见下图),IPersistFile 接口(IID_IPersistFile)提供快捷方式持续性文件的读写功能。对象的持续性,是一个非常常用,并且功能强大的接口家族。但今天,我们只要了解其中两函数,就可以了:IPersistFile::Save()和IPersistFile:Load()。

\"\"
    快捷方式中的各种属性
程序代码:
void CCreateShortcutDlg::OnBnClickedButton1()
{
  ::CoInitialize(NULL);    //COM初始化
 
  CString m_strExe = _T(\"C:\\Windows\\notepad.exe\");    //EXE文件全路径名
  CString m_strLnk = _T(\"C:\\Users\\Mr.Victor\\Desktop\\我的记事本.lnk\");   //快捷方式文件全路径名
  IShellLink *psl = NULL;
  IPersistFile *ppf = NULL;

  HRESULT hr = ::CoCreateInstance(    //启动组件
    CLSID_ShellLink,                        //快捷方式CLSID
    NULL,                         //聚合用
    CLSCTX_INPROC_SERVER,      //进程内(Shell32.dll)服务
    IID_IShellLink,              //IShellLink的IID
    (LPVOID*)&psl                //得到接口指针
  );

  if(SUCCEEDED(hr))
  {
    psl->SetPath(m_strExe);   //全路径程序名(上图中的 目标(T):
//     psl->SetArguments();   //命令行参数
//     psl->SetDescription();   //备注
//     psl->SetHotkey();    //快捷键
//     psl->SetIconLocation();   //图标
//     psl->SetShowCmd();    //窗口尺寸

    //根据EXE的文件名,得到路径名
    TCHAR szWorkPath[MAX_PATH];
    ::lstrcpy(szWorkPath,m_strExe);
    LPTSTR lp = szWorkPath;
    while(*lp)
      lp++;
    CString str = \"\\\";
    while(str != *lp)
      lp--;
    *lp = 0;

    //设置EXE程序的默认工作目录
    psl->SetWorkingDirectory(szWorkPath);   //上图中的 起始位置(S):

    hr = psl->QueryInterface( //查找持续性文件接口指针
      IID_IPersistFile,          //持续性接口IID
      (LPVOID*)&ppf);        //得到接口指针
   
    if(SUCCEEDED(hr))
    {
      USES_CONVERSION;  //转换为UNICODE字符串
      ppf->Save(T2COLE(m_strLnk),TRUE); //保存
    }
  }

  if(ppf)
    ppf->Release();
  if(psl)
    psl->Release();

  ::CoUninitialize();
}

总结:
ISheelLink

The IShellLink interface has the following methods.

MethodDescription
GetArguments

Gets the command-line arguments associated with a Shell link object.  获得命令行参数

GetDescription

Gets the description string for a Shell link object.  获得描述信息(备注行)

GetHotkey

Gets the keyboard shortcut (hot key) for a Shell link object.  获得快捷键

GetIconLocation

Gets the location (path and index) of the icon for a Shell link object.  获得图标

GetIDList

Gets the list of item identifiers for a Shell link object.  获得快捷方式的目标对象的item identifier list  (Windows外壳中的每个对象如文件,目录和打印机等都有唯一的item identifiler list)

GetPath

Gets the path and file name of a Shell link object.  获得快捷方式的目标文件或目录的全路径

GetShowCmd

Gets the show command for a Shell link object.  获得快捷方式的运行方式,比如常规窗口,最大化

GetWorkingDirectory

Gets the name of the working directory for a Shell link object.  获得工作目录

Resolve

Attempts to find the target of a Shell link, even if it has been moved or renamed.  按照一定的搜索规则试图获得目标对象,即使目标对象已经被删除和移动,重命名

SetArguments

Sets the command-line arguments for a Shell link object. 设置命令行参数

SetDescription

Sets the description for a Shell link object. The description can be any application-defined string. 设置描述信息(备注行)

SetHotkey

Sets a keyboard shortcut (hot key) for a Shell link object. 设置快捷键

SetIconLocation

Sets the location (path and index) of the icon for a Shell link object.  设置图标

SetIDList

Sets the PIDL for a Shell link object.  设置快捷方式的目标对象的item identifier list 

SetPath

Sets the path and file name of a Shell link object. 设置快捷方式的目标文件或目录的全路径

SetRelativePath

Sets the relative path to the Shell link object.

SetShowCmd

Sets the show command for a Shell link object. The show command sets the initial show state of the window.  设置快捷方式的运行方式,比如常规窗口,最大化

SetWorkingDirectory

Sets the name of the working directory for a Shell link object.  设置工作目录

 IPersistFile
IPersistFile主要用到两个成员函数:
1、Save
HRESULT Save(
  [in]  LPCOLESTR pszFileName,      
  [in]  BOOL fRemember    
);
参数:
  pszFileName:The absolute path of the file to which the object should be saved. If pszFileName is NULL, the object should save its data to the current file, if there is one.


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史