VB开机运行程序

有两种方法,1是注册表方式

模块代码

  1. Option Explicit
  2. Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As LongByVal lpValueName As StringByVal Reserved As LongByVal dwType As Long, lpData As Any, ByVal cbData As LongAs Long
  3. Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As LongByVal lpSubKey As String, phkResult As LongAs Long
  4. Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As LongAs Long
  5. Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As LongByVal lpValueName As StringAs Long
  6. Public Const REG_SZ = 1
  7. Public Const HKEY_LOCAL_MACHINE = 
  8. '*************************************************************************
  9. '**函 数 名: SetAutoRun
  10. '**输    入: ByVal Autorun(Boolean) -
  11. '**输    出: 无
  12. '**功能描述: 随WINDOWS自动启动/取消启动模块
  13. '**全局变量:
  14. '**调用方法: Call SetAutoRun(True/False)
  15. '**作    者: Mr.David
  16. '**日    期: 2006-09-05 09:07:25
  17. '**修 改 人:
  18. '**日    期:
  19. '**版    本: V1.0.0
  20. '*************************************************************************
  21. Public Sub SetAutoRun(ByVal Autorun As Boolean)
  22.     Dim KeyId As Long
  23.     Dim MyexePath As String
  24.     Dim regkey As String
  25.     
  26.     MyexePath = App.Path & "/" & App.EXEName & ".exe" '获取程序位置
  27.     regkey = "Software/Microsoft/Windows/CurrentVersion/Run" '键值位置变量
  28.     Call RegCreateKey(HKEY_LOCAL_MACHINE, regkey, KeyId) '建立
  29.     
  30.     If Autorun Then
  31.         RegSetValueEx KeyId, "MySoftware", 0&, REG_SZ, ByVal MyexePath, LenB(MyexePath)
  32.     Else
  33.         RegDeleteValue KeyId, "MySoftware"
  34.     End If
  35.     RegCloseKey KeyId
  36. End Sub
  37. 调用方法
  38. SetAutoRun(ByVal Autorun As Boolean)
  39. '2是利用Vb5stkit.dll里面的函数
  40. '窗体部分代码,加入6个按钮
  41. Option Explicit
  42. Private Sub CmdAddStartup_Click()       '在开始菜单的启动程序组下创建记事本的快捷方式
  43.     Call OSfCreateShellLink("/启动""记事本", GetWindowsPath & "/Notepad.exe""")
  44. End Sub
  45. Private Sub CmdAddDeskTop_Click()       '在桌面创建记事本的快捷方式
  46.     Call OSfCreateShellLink("../../桌面""记事本", GetWindowsPath & "/Notepad.exe""")
  47. End Sub
  48. Private Sub CmdAddProgram_Click()       '在程序菜单的Notepad程序组下创建记事本的快捷方式
  49.     Call OSfCreateShellGroup("Notepad"'先建立程序组
  50.     Call OSfCreateShellLink("Notepad""记事本", GetWindowsPath & "/Notepad.exe""")
  51. End Sub
  52. Private Sub CmdAddStartMenu_Click()
  53.     Dim i As Long
  54.     For i = 1 To 5                     '在开始菜单创建记事本的快捷方式,必须用循环才能创建?
  55.         
  56.         Call OSfCreateShellLink("../../「开始」菜单""记事本", GetWindowsPath & "/Notepad.exe""")
  57.     Next
  58. End Sub
  59.     
  60. Private Sub CmdQuickLaunch_Click()     '在快捷工具栏下创建记事本的快捷方式
  61.     Call OSfCreateShellLink("../../Application Data/Microsoft/Internet Explorer/Quick Launch""记事本", GetWindowsPath & "/Notepad.exe""")
  62. End Sub
  63. Private Sub CmdDelAllLink_Click()
  64.     Call OSfRemoveShellLink("../../「开始」菜单""记事本")         '删除开始菜单上的快捷方式
  65.     Call OSfRemoveShellLink("../../桌面""记事本")                 '删除桌面上的快捷方式
  66.     'Call OSfRemoveShellLink("Notepad", "记事本")                   '删除Notepad程序组下的快捷方式,这样不能删除程序组
  67.     
  68.     Call RemoveShellGroup                                           '删除Notepad程序组下的快捷方式
  69.     Call OSfRemoveShellLink("/启动""记事本")                      '删除启动菜单下的快捷方式
  70.     Call OSfRemoveShellLink("../../Application Data/Microsoft/Internet Explorer/Quick Launch""记事本")     '删除快捷工具栏下的快捷方式
  71. End Sub
  72. Private Sub RemoveShellGroup()
  73.     On Error GoTo ToExit '打开错误陷阱
  74.     '------------------------------------------------
  75.     'RmDir删除一个存在的目录或文件夹。语法RmDir Path
  76.     '必要的 path 参数是一个字符串表达式,用来指定要删除的目录或文件夹。path 可以包含驱动器。如果没有指定驱动器,则 RmDir 会在当前驱动器上删除目录或文件夹。
  77.     '说明如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
  78.     Kill (GetProgarmPath(Me.hWnd) & "/Notepad/记事本.lnk")
  79.     RmDir (GetProgarmPath(Me.hWnd) & "/Notepad")
  80.     '------------------------------------------------
  81.     Exit Sub
  82.     '----------------
  83. ToExit:
  84.     Resume Next
  85. End Sub
  86. '模块代码
  87. Option Explicit
  88. '-----------------------------------------------------
  89. '               创建和删除快捷方式
  90. '-----------------------------------------------------
  91. '               洪恩在线  求知无限
  92. '-----------------------------------------------------
  93. '------名称-------------------作用--------------------
  94. '       CmdAddStartup             "创建启动程序组快捷方式"
  95. '       CmdAddDeskTop             "创建桌面快捷方式"
  96. '       CmdAddStartMenu           "创建开始菜单快捷方式"
  97. '       CmdAddProgram             "创建程序组下的快捷方式"
  98. '       CmdQuickLaunch            "创建快捷工具栏的快捷方式"
  99. '       CmdDelAllLink             "删除所有快捷方式"
  100. '-----------------------------------------------------
  101. '要在VB中创建Windows的快捷方式,需要用到VB的一个动态链接库
  102. 'Vb5stkit.dll。在该动态链接库中提供了三个函数
  103. 'OSfCreateShellGroup、OSfCreateShellLink、OSfRemoveShellLink
  104. '分别用于创建快捷方式程序组、创建快捷方式和删除快捷方式。
  105. '-----------------------------------------------------
  106. Declare Function OSfCreateShellGroup Lib "Vb5stkit.dll" _
  107.         Alias "fCreateShellFolder" (ByVal lpstrDirName As StringAs Long
  108.         
  109. 'lpstrDirName指定了程序组的名称
  110. '-----------------------------------------------------
  111. Declare Function OSfCreateShellLink Lib "Vb5stkit.dll" _
  112.         Alias "fCreateShellLink" (ByVal lpstrFolderName As String, _
  113.         ByVal lpstrLinkName As StringByVal lpstrLinkPath As StringByVal lpstrLinkArguments As StringAs Long
  114.         
  115. 'lpstrfoldername指定保存快捷方式的文件夹
  116. 'lpstrlinkname指定快捷方式的文件名
  117. 'lpstrLinkpathe指定快捷方式所指向的应用程序或文件
  118. 'lpstrLinkArguments是程序运行所需的参数
  119. '-----------------------------------------------------
  120. Declare Function OSfRemoveShellLink Lib "Vb5stkit.dll" Alias _
  121.         "fRemoveShellLink" (ByVal lpstrFolderName As StringByVal lpstrLinkName As StringAs Long
  122. '获取Windows目录
  123. Private Declare Function GetWindowsDirectory Lib "kernel32" Alias _
  124.                           "GetWindowsDirectoryA" (ByVal lpBuffer As StringByVal nSize As LongAs Long
  125. '获得文件夹路径
  126. Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" (ByVal hwndOwner As LongByVal lpszPath As StringByVal nFolder As LongByVal fCreate As LongAs Long
  127. Private Const Max_Path = 260       '缓冲区大小
  128. Private Const CSIDL_PROGRAMS = &H2 '程序组常量
  129. '*************************************************************************
  130. '**函 数 名: GetWindowsPath
  131. '**输    入: 无
  132. '**输    出: (String) -
  133. '**功能描述: 得到Windows路径
  134. '**全局变量:
  135. '**调用模块:
  136. '**作    者: Mr.David
  137. '**日    期: 2006-09-19 19:49:17
  138. '**修 改 人:
  139. '**日    期:
  140. '**版    本: V1.0.0
  141. '*************************************************************************
  142. Public Function GetWindowsPath() As String
  143.     Dim ChrLen As Long, WinDir As String
  144.     WinDir = Space$(Max_Path)
  145.     ChrLen = GetWindowsDirectory(WinDir, Max_Path)
  146.     WinDir = Left$(WinDir, ChrLen)
  147.     GetWindowsPath = WinDir
  148. End Function
  149. '*************************************************************************
  150. '**函 数 名: GetProgarmPath
  151. '**输    入: frmHwnd(Long) -
  152. '**输    出: (String) -
  153. '**功能描述: 获取开始菜单程序组的路径
  154. '**全局变量:
  155. '**调用模块:
  156. '**作    者: Mr.David
  157. '**日    期: 2006-09-19 19:48:16
  158. '**修 改 人:
  159. '**日    期:
  160. '**版    本: V1.0.0
  161. '*************************************************************************
  162. Public Function GetProgarmPath(frmHwnd As LongAs String
  163.     Dim CSILD_NUM As Long, strBouff As String
  164.     strBouff = String$(Max_Path, 0)
  165.     SHGetSpecialFolderPath frmHwnd, strBouff, CSIDL_PROGRAMS, 0
  166.     GetProgarmPath = Left$(strBouff, InStr(1, strBouff, Chr$(0)) - 1)
  167. End Function
  168. 方法3
  169. 先引用系统里面都有的WSHom.Ocx
  170. Option Explicit
  171. '*************************************************************************
  172. '**函 数 名: SetAutoRun
  173. '**输    入: ByVal Autorun(Boolean) -
  174. '**输    出: 无
  175. '**功能描述: 随WINDOWS自动启动/取消启动模块
  176. '**全局变量:
  177. '**调用方法: Call SetAutoRun(True/False)
  178. '**作    者: Mr.David
  179. '**日    期: 2006-09-05 09:07:25
  180. '**修 改 人:
  181. '**日    期:
  182. '**版    本: V1.0.0
  183. '*************************************************************************
  184. Public Sub SetAutoRun(ByVal Autorun As Boolean)
  185.     
  186.     'WshShell 对象
  187.     'ProgId Wscript.Shell
  188.     '文件名 WSHom.Ocx
  189.     
  190.     Dim WshShell As WshShell
  191.     
  192.     Set WshShell = CreateObject("Wscript.Shell")
  193.     
  194.     If Autorun Then
  195.         WshShell.RegWrite "HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/" & App.EXEName, App.Path & "/" & App.EXEName & ".exe"
  196.     Else
  197.         WshShell.RegDelete "HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/" & App.EXEName
  198.     End If
  199.     
  200.     Set WshShell = Nothing
  201.     
  202. End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值