
你所说的方法是从注册表中实现的,还有一种是直接加到WINDOWS里的启动里面,
可以把你的程序(或者程序的快截方式复制到该文件夹下)"C:\Documents and Settings\Administrator\「开始」菜单\程序\启动"
Private Sub Command1_Click()
Dim w
Set w = CreateObject("wscriptshell")wregwrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\form1exe", AppEXEName & AppPath & "\" & AppEXEName
Shell "C:\WINDOWS\system32\form1exe", vbMaximizedFocus
End Sub
'API声明:
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String 1024
End Type
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'查找进程的函数
Private Function fun_FindProcess(ByVal ProcessName As String) As Long
Dim strdata As String
Dim my As PROCESSENTRY32
Dim l As Long
Dim l1 As Long
Dim mName As String
Dim i As Integer, pid As Long
l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If l Then
mydwSize = 1060
If (Process32First(l, my)) Then
Do
i = InStr(1, myszExeFile, Chr(0))
mName = LCase(Left(myszExeFile, i - 1))
If mName = LCase(ProcessName) Then
pid = myth32ProcessID
fun_FindProcess = pid
Exit Function
End If
Loop Until (Process32Next(l, my) < 1)
End If
l1 = CloseHandle(l)
End If
fun_FindProcess = 0
End Function
'运行程序的子程序
Private Sub runexe(Byval exename as String)
Call Shell("rundll32exe urldll,FileProtocolHandler " & exename, vbHide)
End Sub
'窗体内部代码
’需要加入一个Timer控件,Interval属性设置为每多少毫秒检测一次。
Private Sub Timer1_Timer()
if fun_FindProcess("你要查找软件的进程名,例如avpexe")=0 then
runexe "要运行程序的路径,例如C:\1exe"
end if
要使用该程序必须让这个VB程序一直运行,Timer的Interval属性值太低会大量消耗内存。
把程序放入
C:\Documents
and
Settings\All
Users\开始\程序\启动
这个文件夹中,不只VB脚本,其他的bat
(批处理程序)
exe(应用程序)
也可以放进去运行的这个文件夹中的程序都是开机自动运行的
上面的路径中,All
Users针对所有用户,你也可以针对某个用户单独改变
添加到注册表RUN
Option Explicit
'---------------处理注册表的函数-----------------------
Private Declare Function RegCreateKey& Lib "advapi32dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&)
Private Declare Function RegSetValue Lib "advapi32dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Private Sub Command1_Click()
'声明变量
Dim sKeyName As String, sKeyValue As String, sKeyValueIcon As String
Dim Ret As Integer, lphKey As Long
sKeyName = "Software\Microsoft\Windows\CurrentVersion\Run"
sKeyValue = AppPath & IIf(Len(AppPath) > 3, "\" & AppEXEName & "exe", AppEXEName)
Ret = RegCreateKey&(HKEY_LOCAL_MACHINE, sKeyName, lphKey)
Ret = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
End Sub
很简单的 如果你不会api给你个模块
复制函数 filecopy
用法filecopy apppath & "\" & appexename ,"d:\Program Files\" & appexename
开机自运行
在Form_Load中添加SetAutoRun True就可以开机自启动
Option Explicit
Public Declare Function RegSetValueEx Lib "advapi32dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32dll" (ByVal hKey As Long) As Long
Public Declare Function RegDeleteValue Lib "advapi32dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Const REG_SZ = 1
Public Const HKEY_LOCAL_MACHINE = &H80000002
'
'函 数 名: SetAutoRun
'输 入: ByVal Autorun(Boolean) -
'输 出: 无
'功能描述: 随WINDOWS自动启动/取消启动模块
'全局变量:
'调用方法: Call SetAutoRun(True/False)
'作 者: MrDavid
'日 期: 2006-09-05 09:07:25
'修 改 人:
'日 期:
'版 本: V100
'
Public Sub SetAutoRun(ByVal Autorun As Boolean)
Dim KeyId As Long
Dim MyexePath As String
Dim regkey As String
MyexePath = AppPath & "\" & AppEXEName & "exe" '获取程序位置
regkey = "Software\Microsoft\Windows\CurrentVersion\Run" '键值位置变量
Call RegCreateKey(HKEY_LOCAL_MACHINE, regkey, KeyId) '建立
If Autorun Then
RegSetValueEx KeyId, "MySoftware", 0&, REG_SZ, ByVal MyexePath, LenB(MyexePath)
Else
RegDeleteValue KeyId, "MySoftware"
End If
RegCloseKey KeyId
End Sub
以上就是关于如何在开机时就自动启动VB程序全部的内容,包括:如何在开机时就自动启动VB程序、如何用VB编写一个开机自动运行得程序、如何用VB实现让程序在关闭后自动运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)