用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 |