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

原创 2001年05月16日 16:18:00

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

  下面的例子代码演示了怎样创建一个快捷方式。在这个例子里,这个快捷方式保存在C:/Drive目录下。//----------------------------------------------------------------------
include <shlobj.h>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(OpenDialog1->Execute())
        CreateShortCut(OpenDialog1->FileName);
}
file://----------------------------------------------------------------------
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();
    }
}
file://----------------------------------------------------------------------

  上面的例子只是把快捷方式文件保存到了c:/drive目录下,但没保存到desktop目录下。

  要让快捷方式出现在桌面上,只须把快捷方式文件保存到desktop目录下。首先我们要找到windows的desktop目录,请参阅判断windows的Desktop及相关目录这一节。一旦我们知道了desktop所在的目录,我们就能将快捷方式文件保存到desktop目录下。然后windows就能将快捷方式图标显示到桌面上。下面是经过改进了的例子:
file://----------------------------------------------------------------------
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();
    }
}
file://----------------------------------------------------------------------
不要陷于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
  • 4173

Android 快捷方式的创建

一、在日常开发中,我们经常会遇到这样的需求就是网桌面添加快捷方式:常见的快捷方式有两种:一是APP的快捷方式,一是widget插件的快捷方式。下面详细介绍这两种情况的应用:    参考网站:http:...
  • lenmoyouzi
  • lenmoyouzi
  • 2013年11月25日 10:34
  • 16704

VC++创建快捷方式、删除快捷方式、添加开始菜单程序组菜单

VC++创建快捷方式、删除快捷方式、添加开始菜单程序组菜单并删除程序组菜单的实例,这些小技巧都是在平时软件开发过程中经常用到的功能,有必要掌握。删除快捷方式只需要简单地调用文件操作函数SHFileOp...
  • thanklife
  • thanklife
  • 2017年04月05日 16:19
  • 416

C#创建桌面快捷方式

1、添加引用Windows Script Host Object Model,并引用明明空间using IWshRuntimeLibrary; 2、代码 using System; using I...
  • lucky51222
  • lucky51222
  • 2015年10月27日 19:10
  • 2465

WINCE 实用技巧 之 创建快捷方式详解

.WINCE快捷方式结构                   WINCE的快捷方式和WIN2K,XP的不同,只是一个后 缀名为.LNK的文本文件. 其格式如下:                ...
  • gh2663287
  • gh2663287
  • 2015年07月12日 15:47
  • 293

Fedora 创建桌面快捷方式的方法

在Fedora下创建桌面快捷方式
  • qq_21280629
  • qq_21280629
  • 2015年11月19日 21:53
  • 2935

NSIS 附加快捷方式到开始菜单、桌面、任务栏

在安装完成后,自动创建快捷方式,并且能够附加到开始菜单或锁定到任务栏。 在网上找到的很多方法,看到使用C++实现的一个方法,代码如下: //任务栏:taskbarpin/taskbarun...
  • yimengchenxi
  • yimengchenxi
  • 2015年08月06日 13:48
  • 4074

Linux中创建桌面快捷图标(以Eclipse为例)

大家好啊,现在Linux系统越来越普及了,而且它也以其优良的性能和开源的特性为大家所钟爱。但是,linux使用起来,桌面系统毕竟没有windows系统用着方便。比若说创建快捷图标,像eclipse这样...
  • zhanghuoding
  • zhanghuoding
  • 2015年01月06日 15:48
  • 6725

Ubuntu16.04 创建桌面快捷方式

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

如何在Linux的桌面上创建快捷方式或启动器

1使用命令行创建桌面快捷方式(h使用) 要为特定程序或命令创建桌面快捷方式,你可以使用任意文本编辑器创建一个.desktop文件,然后把它放到/usr/share/applications或者~/....
  • zhuiqiuk
  • zhuiqiuk
  • 2016年11月04日 16:23
  • 1451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用BCB在windows桌面创建快捷方式
举报原因:
原因补充:

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