用BCB在windows桌面创建快捷方式

原创 2004年06月30日 12:19:00

用BCB在windows桌面创建快捷方式


API提供了一个叫做IShellLink的COM接口允许我们创建快捷方式。为在桌面创建快捷方式,我们创建一个IShellLink对
象,设置它的属性,然后把这个link保存到desktop目录。

下面的例子代码演示了怎样创建一个快捷方式。在这个例子里,这个快捷方式保存在C:/Drive目录下。

//----------------------------------------------------------------------
include <shlobj.h>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(OpenDialog1->Execute())
        CreateShortCut(OpenDialog1->FileName);
}
//----------------------------------------------------------------------
void TForm1::CreateShortCut(const AnsiString &file)
{
    IShellLink* pLink;
    IPersistFile* pPersistFile;
    if(SUCCEEDED(CoInitialize(NULL)))
    {
        if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,
                                      CLSCTX_INPROC_SERVER,
                                      IID_IShellLink, (void **) &pLink)))
        {
            pLink->SetPath(file.c_str());
            pLink->SetDescription("Woo hoo, look at Homer's shortcut");
            pLink->SetShowCmd(SW_SHOW);
            if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,
                                               (void **)&pPersistFile)))
            {
                WideString strShortCutLocation("C://bcbshortcut.lnk");
                pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
                pPersistFile->Release();
            }
            pLink->Release();
        }
 
        CoUninitialize();
    }
}
//----------------------------------------------------------------------
上面的例子只是把快捷方式文件保存到了c:/drive目录下,但没保存到desktop目录下。

要让快捷方式出现在桌面上,只须把快捷方式文件保存到desktop目录下。首先我们要找到windows的desktop目录。一
旦我们知道了desktop所在的目录,我们就能将快捷方式文件保存到desktop目录下。然后windows就能将快捷方式图标
显示到桌面上。下面是经过改进了的例子:

//----------------------------------------------------------------------
void TForm1::CreateShortCut(const AnsiString &file)
{
    IShellLink* pLink;
    IPersistFile* pPersistFile;
    LPMALLOC      ShellMalloc;
    LPITEMIDLIST  DesktopPidl;
    char DesktopDir[MAX_PATH];
 
    if(FAILED(SHGetMalloc(&ShellMalloc)))
        return;
 
    if(FAILED(SHGetSpecialFolderLocation(NULL,
                                         CSIDL_DESKTOPDIRECTORY,
                                         &DesktopPidl)))
        return;
 
    if(!SHGetPathFromIDList(DesktopPidl, DesktopDir))
    {
        ShellMalloc->Free(DesktopPidl);
        ShellMalloc->Release();
        return;
    }
 
    ShellMalloc->Free(DesktopPidl);
    ShellMalloc->Release();
                                              
    if(SUCCEEDED(CoInitialize(NULL)))
    {
        if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,
                                      CLSCTX_INPROC_SERVER,
                                      IID_IShellLink, (void **) &pLink)))
        {
            pLink->SetPath(file.c_str());
            pLink->SetDescription("Woo hoo, look at Homer's shortcut");
            pLink->SetShowCmd(SW_SHOW);
 
            if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,
                                               (void **)&pPersistFile)))
            {
 
                WideString strShortCutLocation(DesktopDir);
                strShortCutLocation += "//bcbshortcut.lnk";
                pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
                pPersistFile->Release();
            }
            pLink->Release();
        }
        CoUninitialize();
    }
}
//----------------------------------------------------------------------
不要陷于COM的泥沼之中
创建快捷方式包括一些对COM的使用。不要让你陷入到COM的复杂之中。COM只是创建和使用对象的一种方法。在这
个例子里我们可以考虑不使用COM而是用等价的C++技术。

COM code                                   C++ psuedo-equivalent
IShellLink*   pLink;                       TShellLink   *Link;
IPersistFile* pPersistFile;                TPersistFile *PersistFile;
 
CoInitialize();
 
                                          
CoCreateInstance(CLSID_ShellLink,          Link = new TShellLink;
                 NULL,
                 CLSCTX_INPROC_SERVER,
                 IID_IShellLink,
                 (void **) &pLink)
 
                                          
pLink->SetPath(file.c_str());              Link->SetPath(file.c_str());
pLink->SetShowCmd(SW_SHOW);                Link->SetShowCmd(SW_SHOW);
 
 
                                          
pLink->QueryInterface(IID_IPersistFile     PersistFile =
               (void **)&pPersistFile)))      dynamic_cast<TPersistFile*>(Link);
 
pPersistFile->Save("C://", TRUE);          PersistFile->Save("C://");
 
 
                                          
pPersistFile->Release();                   delete PersistFile
pLink->Release();                          delete Link;
 
CoUninitialize();

windows命令行创建各种快捷方式

一、示例为创建记事本的快捷方式到桌面 set path=%WINDIR%\notepad.exe set topath="%USERPROFILE%\桌面\记事本.url" echo [In...
  • gzsimone
  • gzsimone
  • 2017年02月09日 21:56
  • 4052

Ubuntu16.04 创建桌面快捷方式

一、基本概念Linux 系统中的Desktop Entry 文件以desktop为后缀名。Desktop Entry 文件是 Linux 桌面系统中用于描述程序启动配置信息的文件。 进入/usr/s...
  • u012922838
  • u012922838
  • 2017年02月10日 20:39
  • 8457

如何为javaWeb项目的网址生成一个桌面快捷方式

今天刚接到客户的需求,说是没有域名,每次都输入ip和端口号打开网站,很麻烦,能不能做成一个桌面快捷方式,双击这个图标,立刻调用浏览器打开网站。。。感觉客户永远是最懒的,各种奇葩的需求,没办法,只能利用...
  • hsj1213522415
  • hsj1213522415
  • 2017年02月15日 17:26
  • 2304

如何去掉windows桌面快捷方式的箭头图标

方法一:注册表删除和恢复        一、删除方法     1.运行注册表编辑器(regedit),打开hkey_classes_root\lnkfile分支。     2.在lnkfi...
  • zhuangmengqiu
  • zhuangmengqiu
  • 2012年02月29日 19:36
  • 604

解决windows下桌面快捷方式的快捷键重启后失效的问题

事处原因:想实现通过点击物理按键去启动指定的应用程序或执行特定的文件。 解决步骤: 1、将文件或应用程序创建连接文件,再设置快捷键,但是这个问题重启会失效;(然并卵) 该方法的执行过程,在网上找...
  • u013491946
  • u013491946
  • 2017年06月21日 21:25
  • 605

C#创建桌面快捷方式

  • 2017年02月22日 14:03
  • 2KB
  • 下载

狂龙快速创建桌面快捷方式 v1.0

  • 2017年06月21日 22:13
  • 1.86MB
  • 下载

android创建桌面快捷方式

  • 2016年01月19日 18:25
  • 4.06MB
  • 下载

创建网页快捷方式到桌面

  • 2014年06月14日 16:16
  • 98KB
  • 下载

桌面快捷方式的创建

  • 2015年02月05日 11:12
  • 375B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用BCB在windows桌面创建快捷方式
举报原因:
原因补充:

(最多只允许输入30个字)