用DDE创建桌面快捷方式

豆豆网   技术应用频道   2006年07月27日  【字号: 收藏本文

本文详细介绍用DDE创建桌面快捷方式

  受"用DDE连接方法向开始菜单中添加快捷方式"一文的启发,我写了一个可以向桌面增加快捷方式的小程序。与调用Vb5stkit.dll或Vb6stkit.dll来建立快捷方式相比,最大的特点在于避免了对该DLL文件的依赖(并不是每一台Win9x的机上都有的这些文件的)。是不是很环保?

  原理:利用Text控件的DDE在系统开始菜单中添加一个快捷方式,然后将该快捷方式剪切到桌面上来。

  须解决的问题:取得系统开始菜单和桌面的路径。这其中当然免不了要调用到API的SHGetSpecialFolderLocation 和SHGetPathFromIDList 函数。

  实现步骤:

  1.新建工程;

  2.在表单中增加一个文本框(txtLnk)及一个命令按钮(cmdMakeLnk);

  3.加入以下代码:

  Option Explicit
Const CSIDL_DESKTOP = &H0 系统桌面
Const CSIDL_PROGRAMS = &H2 系统"开始-$#@62;程序"菜单
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Private Declare Function SHGetSpecialFolderLocation _
Lib "shell32.dll" (ByVal hwndOwner As Long, _
ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib _
"shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long

  定义取得系统特定文件夹的路径的函数。

  Private Function GetSpecialfolder(CSIDL As Long) As String
Dim lRet As Long
Dim IDL As ITEMIDLIST
Dim sPath As String
lRet = SHGetSpecialFolderLocation(100, CSIDL, IDL)
   错误时返回非0值
If lRet = 0 Then
sPath = Space$(512)
lRet = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)

  一定要删除末尾的 0 字节。这在调用API时常常会遇到。

  GetSpecialfolder = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
Exit Function
End If
GetSpecialfolder = ""
End Function
Private Sub cmdMakeLnk_Click()
Dim sProgramsPath As String
Dim sDesktopPath As String
sProgramsPath = GetSpecialfolder(CSIDL_PROGRAMS)
sDesktopPath = GetSpecialfolder(CSIDL_DESKTOP)
txtLnk.LinkTopic = "Progman|Progman"
txtLnk.LinkMode = 2

  格式:

  "[AddItem($#@60;欲建立快捷方式的命令行(可以是文件夹)$#@62;,$#@60;快捷方式的名称$#@62; ,[快捷方式的图标文件],[第几个图标])]"

  注意:

  1、由于文件名是字符串,所以必须加引号,也就是以下这行命令为什么们用了两个引号的原因

  2、在"快捷方式的图标文件"中所出现的路径及文件必须是8.3格式,不支持长文件名。

  下面假设为 C:\WINDOWS\CALC.EXE建立快捷方式

  txtLnk.LinkExecute "[AddItem(""C:\WINDOWS\CALC.EXE"",""计算器"" )]"

  将快捷方式移至桌面

  sProgramsPath = sProgramsPath & "\计算器.lnk"
sDesktopPath = sDesktopPath & "\计算器.lnk"
FileCopy sProgramsPath, sDesktopPath
Kill sProgramsPath
End Sub

  以上在Windows98、ME + VB5、VB6通过。有任何问题欢迎你跟我联系lonstar@cmmail.com

作者:lonstar    责编:豆豆技术应用

正在加载评论...