阅读文章(首页/网页制作/HTML/JavaScript/)

用DDE创建桌面快捷方式

[日期:2001-01-03] 来源:yesky  作者:lonstar [字体: ]

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



阅读:
录入:

评论 】 【 推荐 】 【 打印
上一篇:Win2K"秘密武器"之注册表控制台工具
下一篇:Java Servlet, JSP的安全性实现
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款