请问到底怎么创建桌面快捷方式?
(注意:是桌面,不是菜单中)
我用DDE,只能创建在菜单中,google查,全是说要引用一个VB4的dll才行,难道没有好方法码?比如API什么的?

解决方案 »

  1.   

    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 StringDim lRet As LongDim IDL As ITEMIDLISTDim sPath As StringlRet = SHGetSpecialFolderLocation(100, CSIDL, IDL)  错误时返回非0值If lRet = 0 ThensPath = Space$(512)lRet = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)  一定要删除末尾的 0 字节。这在调用API时常常会遇到。GetSpecialfolder = Left$(sPath, InStr(sPath, Chr$(0)) - 1)Exit FunctionEnd IfGetSpecialfolder = ""End FunctionPrivate Sub cmdMakeLnk_Click()Dim sProgramsPath As StringDim sDesktopPath As StringsProgramsPath = 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
      

  2.   

    你的方法就是DDE方法呀?我试验过了,这种方法无法确定快捷方式是建立在当前用户(Current user)菜单中呢,还是建立在所有用户(All user)中
      

  3.   

    Windows环境下的快捷方式由于能够极大的简化了用户访问磁盘文件的操作,因此,许多软件在安装的最后阶段都会在开始菜单或者桌面上建立应用程序的快捷方式,通常,这些工作都是利用专门的安装软件来完成的。可在一些软件中,还为用户在程序中动态的添加或者删除桌面上的快捷方式的功能。本文所要讲述的就是如何在VB中实现动态添加/删除Windows的快捷方式。
    ---- 要在VB中创建Windows的快捷方式,需要用到VB的一个动态链接库Vb5stkit.dll。在该动态链接库中提供了三个函数OSfCreateShellGroup、OSfCreateShellLink、OSfRemoveShellLink,分别用于创建快捷方式程序组、快捷方式、删除快捷方式。这三个函数的声明形式分别如下: Private Declare Function OSfCreateShellGroup Lib "Vb5stkit.dll" Alias "fCreateShellFolder" (ByVal lpstrDirName As String) As LongPrivate Declare Function OSfCreateShellLink Lib "Vb5stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String,ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String) As LongPrivate Declare Function OSfRemoveShellLink Lib "Vb5stkit.dll" Alias "fRemoveShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String) As Long---- 其中lpstrDirName指定了程序组的名称;lpstrfoldername指定保存快捷方式的文件夹,默认为“c:\Windows\start menu\programs”,lpstrlinkname指定快捷方式的文件名,lpstrpathname指定快捷方式所指向的应用程序或文件。---- 下面的代码具体演示了以上三个函数的用法:---- 首先在VB下新建“工程”,然后在Form1的“通用”,“声明”部分输入上面列出的函数声明,然后在Form1上添加三个命令按钮,在其Click事件中分别输入:Private Sub Command1_Click()
    Dim lresult As Long
    '在桌面创建记事本的快捷方式
    lresult = OSfCreateShellLink("..\..\desktop",
    "记事本", "c:\Windows\notepad.exe", "")'在开始菜单创建记事本的快捷方式
    lresult = OSfCreateShellLink("..\..\start menu",
    "记事本", "c:\Windows\notepad.exe", "")'在程序菜单的Test程序组下创建记事本的快捷方式
    lresult = OSfCreateShellLink("test", "记事本",
    "c:\Windows\notepad.exe", "")
    End SubPrivate Sub Command2_Click()
    Dim lresult As Long
    '在程序菜单中添加一个名为Test的程序组
    lresult = OSfCreateShellGroup("Test")
    End SubPrivate Sub Command3_Click()
    Dim lresult As Long
    '删除开始菜单上的快捷方式
    lresult = OsfRemoveShellLink
    ("..\..\start menu", "记事本")
    '删除桌面上的快捷方式
    lresult = OsfRemoveShellLink
    ("..\..\desktop", "记事本")
    '删除Test程序组下的快捷方式
    lresult = OSfRemoveShellLink("Test", "记事本")
    End Sub---- 按F5运行工程1,单击命令按钮就可以看到实际的效果了。
      

  4.   


    to 时光
    你有没有看啊,Vb5stkit.dll这个文件只在VB4和VB5才提供,VB6以后就不提供,我可不想使用这种已经被淘汰的文件(而且还要重新打包)
      

  5.   

    在桌面上建立快捷方式VB中建立快捷方式比较容易,只要借助于Windows Script Host,建立快捷方式简直就是轻而易举。但首先要引用WSH,选VB的菜单Project->Reference,加入Windows Script Host Model。ShortCut.BAS文件如下Attribute VB_Name = "ShortCut"
    Option ExplicitPublic Sub CreateShortCutOnDeskTop(ByVal Name As String, ByVal Description As String)Dim x As New IWshRuntimeLibrary.IWshShell_Class
    Dim y As IWshRuntimeLibrary.IWshShortcut_Class
    Set y = x.CreateShortcut(x.SpecialFolders.Item("AllUsersDesktop") & "\" & Name & ".lnk")
    y.TargetPath = App.Path & "\" & App.EXEName
    y.Description = Description
    y.WorkingDirectory = App.Path
    y.SaveEnd Sub
    SpecialFolders是IWshShell_Class类的一个属性,包含了很多特殊目录路径,比如上面的程序就用了AllUsersDesktop,还可以是开始菜单AllUsersStartMenu 等。可以参考MSDN。
    CreateShortcut是IWshShell_Class类的一个方法,用于建立快捷方式,其参数是快捷方式的文件名。然后给出快捷方式的各个属性,最后保存。
      

  6.   

    在桌面上建立快捷方式
    我查看vb6.0自带的安装程序setup1中的代码,分析以后,结果如下
    Global Const gstrQUOTE$ = """"Private Declare Function OSfCreateShellLink Lib "vb6stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String, ByVal fPrivate As Long, ByVal sParent As String) As LongPublic Function CreatLinkAtDesktop(strName As String, strFile As String, Optional strPro As String) As Boolean
        CreatLinkAtDesktop = True
        Dim lReturn As Long
      'win2000下
        lReturn = OSfCreateShellLink("..\..\桌面", strUnQuoteString(strName), strUnQuoteString(strFile), strPro & vbNullChar, True, "$(Programs)")
        If lReturn Then Exit Function
      'win98下
        lReturn = OSfCreateShellLink("..\..\Desktop", strUnQuoteString(strName), strUnQuoteString(strFile), strPro & vbNullChar, True, "$(Programs)")
        If lReturn Then Exit Function
        CreatLinkAtDesktop = False
    End Function
    Public Function strUnQuoteString(ByVal strQuotedString As String)
    '
    ' This routine tests to see if strQuotedString is wrapped in quotation
    ' s, and, if so, remove them.
    '
        strQuotedString = Trim(strQuotedString)    If Mid$(strQuotedString, 1, 1) = gstrQUOTE And Right$(strQuotedString, 1) = gstrQUOTE Then
            '
            ' It's quoted.  Get rid of the quotes.
            '
            strQuotedString = Mid$(strQuotedString, 2, Len(strQuotedString) - 2)
        End If
        strUnQuoteString = strQuotedString
    End Function
    我运行了一下,还挺好用。你不防试试。