将应用程序放到Windows启动中
2000-09-06 11:16:11
使用Windows 95的编程人员都知道,Windows 95在启动时,能自动将一些应用程序加载并运行,利用VB5.0可以非常方便地实现这一功能。
一、 编程思路
我们知道,在Windows 95系统中有一个注册表编辑器程序Regedit.exe,它是用于更改系统注册表设置的工具。系统注册表中包含了关于系统配置及运行的重要信息。打开注册表编辑器,在左侧栏内双击“HKEY—LOCAL—MACHINE”,双击其下的“SOFTWARE”,双击其下的“Microsoft”,双击其下的“Windows”, 双击其下的“CurrentVersion”,双击其下的“Run”,这时在右侧窗口内会看到一些键名及其键值,其内容随机器的不同配置而有所不同。例如,在我的系统中有这样一项键名:名称为SysExplr,数据是“d:\progarm files\SthVCD\SysExplr.EXE”,这是系统控制“解霸五自动探测器”自动运行的有关信息。
因此,只需分别以键名和键值的形式,将您的应用程序的标题和完整路径添加到Regedit.exe的以下目录中:HKEY—LOCAL—MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
在Windows下次启动时就会自动运行增加的程序项。
要想在编程中实现上述思路,需要了解如何利用VB5.0实现对系统注册表中“键”的创建、打开、关闭、删除等操作。VB5.0本身没有提供这方面的功能。通过调用Windows的有关API函数,即可实现对系统注册表的各项操作。
二、具体步骤
1.在VB5.0编程环境中,新建工程Project1,在Form1中添加命令按钮Command1。
2.在Project1中添加Moudle1。在Moudle1中定义下列常量和函数声明:
Const REG—SZ = 1
Global Const HKEY—LOCAL—MACHINE = &H80000002
Declare Function OSRegOpenKey Lib ″advapi32″Alias ″RegOpenKeyA″ (ByVal hkey As Long, ByVal lpszSubKey As String, phkResult As Long) As Long
注:该函数用于打开系统注册表中已存在的键。函数的返回值: 如键打开成功返回0,否则返回非0,phkResult被设置为该键的句柄。
Declare Function OSRegSetValueEx Lib ″advapi32″ Alias ″RegSetValueExA″ (ByVal hkey As Long, ByVal lpszValueName As String, ByVal dwReserved As Long, ByVal fdwType As Long, lpbData As Any, ByVal cbData As Long) As Long
注:该函数用于向系统注册表中指定的键添加键名和键值。函数的返回值:添加键名、键值成功返回0,否则返回非0。
Declare Function OSRegCloseKey Lib ″advapi32″ Alias ″RegCloseKey″ (ByVal hkey As Long) As Long
注:该函数用于关闭系统注册表中打开的键。函数的返回值:如键关闭成功返回0,否则返回非0。
3.在Moudle1中编写下列函数:
Function RegOpenKey(ByVal hkey As Long, ByVal lpszSubKey As String, phkResult As Long) As Boolean
Dim lResult As Long
On Error GoTo 0 ' 关闭错误陷阱
lResult = OSRegOpenKey(hkey, lpszSubKey, phkResult)
If lResult = 0 Then RegOpenKey = True
Else RegOpenKey = False
End Function
Function RegSetStringValue(ByVal hkey As Long, ByVal strValueName As String, ByVal strData As String, Optional ByVal fLog) As Boolean
Dim lResult As Long
On Error GoTo 0
lResult = OSRegSetValueEx(hkey, strValueName, 0&, REG—SZ, ByVal strData, LenB(StrConv(strData, vbFromUnicode) + 1)
注:StrConv是VB提供的函数,返回按指定类型转换的 Variant (String)。vbUnicode 是VB系统常数。在上面程序中,StrConv(strData,vbFromUnicode)的作用是:根据系统的缺省码页将字符串转换成Unicode。Unicode是国际标准化组织(ISO)字符标准,它使用16位(2字节编码方案),允许65536个不同的字符空间,Unicode包括标点符号、数学符号、修饰符号等的表示。
If lResult = 0 Then RegSetStringValue = True
Else RegSetStringValue = False
End Function
4.双击Command1,在Click事件中编写下列代码:
Private Sub Command1—Click()
Dim hkey As Long
Dim MyReturn As Long
MyReturn = RegOpenKey(HKEY—LOCAL—MACHINE,″SOFTWARE\Microsoft\Windows\ CurrentVersion\Run″, hkey)
If hkey = 0 Then
MsgBox ″您要求打开的主键尚未创建,或者您的输入有误,请仔细核对后再次运行本程序!″
Exit Sub
End If
MyReturn = RegSetStringValue(hkey, ″MyAcess″, ″d:\program files\office97\office\mymsaccess.exe″, False)
注:如果 fLog 丢失或为 True,则该动作将记录在日志文件,并且,如果用户选择删除已安装的应用程序,该值将被应用程序删除。
If MyReturn Then MsgBox “您的程序已成功添加到Windows 95的启动中,再次启动Windows时系统将自动运行您的程序!", vbExclamation, “特别提示"
Else MsgBox “您的这段代码中存在某种错误,请认真检查!", vbExclamation, “特别提示"
OSRegCloseKey(hkey)
End Sub
以上程序在简体中文Windows95、VB5.0环境中调试通过。
摘自《赛迪网》 张建军、张伍荣/文 |
404 Not Found
404 Not Found
nginx
|
|