| 在Windows桌面创建快捷方式 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-10 11:13:57
|
在Windows桌面创建快捷方式 ----老妖注:偶在Windows ADV 2000,C++ Builder 6.0下编译通过. :D API提供了一个叫做IShellLink的COM接口允许我们创建快捷方式。为在桌面创建快捷方式,我们创建一个IShellLink对象,设置它的属性,然后把这个link保存到desktop目录。 下面的例子代码演示了怎样创建一个快捷方式。在这个例子里,这个快捷方式保存在C:根目录下。 //---------------------------------------------------------------------- #define NO_WIN32_LEAN_AND_MEAN #include <shlobj.h> #include <vcl.h> #pragma hdrstop
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- 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("哈哈,你看到我了吧."); 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(); } } } //---------------------------------------------------------------------- 上面的例子只是把快捷方式文件保存到了c:根目录下,但没保存到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("哈哈,你看到我了吧."); pLink->SetShowCmd(SW_SHOW); i
[1] [2] 下一页
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 利用C++ Builder为计算机增加启动日志 下一篇文章: C++Builder中动态库的链接问题 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |