在编译完VFP程序之后,可能你马上会运行VFP自带的安装向导向其他用户来发布你的应用程序。但是,由于VFP自带的发布向导是预先做好了的
,在许多方面并不能如你愿。比如,利用VFP的安装向导,你不可能将你的应用程序放入Windows启动组中让VFP程序在Windows启动时自动运行
。如果想实现程序自动运行,那该怎么办呢?
一、编程原理
我们知道,系统在启动时自动运行哪些程序主要是取决于启动组内容和系统注册表的设定。修改过注册表的朋友对HKEY—LOCAL—
MACHINE\\Software\\Microsoft\\windows\\CurrentVersion\\run下的内容并不会感到陌生,该键值下的内容决定了系统在启动时所要运行的
程序。因此,我们通过修改注册表,就能够随心所欲地决定在Windows启动时所自动运行的程序。
同样,如果在VFP的程序设计中对系统的注册表进行修改,在HKEY—LOCAL—
MACHINE\\Software\\Microsoft\\windows\\CurrentVersion\\run下新添键值,让VFP程序在Windows启动时自动运行是可实现的。但是利用VFP
自身提供的命令是无法修改注册表的,必须调用API函数。
在Windows的各种动态链接库中,我们能够轻易地找到修改注册表的相关函数,如RegCreateKeyEx(新建键值)、 RegSetvalue(设定键值
)之类的。如果在VFP程序中使用RegSetvalue函数来在RUN键值中加入你想自动运行的VFP应用程序的名称,那么Windows在启动时就能够如你所
愿。通过查看MSDN可知,RegSetvalue的调用格式如下(用C语言表示):
LONG RegSetvalue(HKEY hKey, LPCTSTR lpSubKey,DWORD dwType, LPCTSTR lpData, DWORD cbData)
其中各个参数的含义如下:
hKey: 注册表中的预置主键(该参数的类型为整数型)
lpSubKey: 欲修改主键的名称
dwType: 修改后键值的类型(该函数只支持字符型)
LpData: 写入主键的字符串
cbData: 写入字符串的长度如果操作成功,返回值为0。
二、程序代码
假如你已新建了一项目(项目的主入口程序为main.prg)并生成了VFP应用程序TEST.EXE,然后打开main.prg,往main.prg加入修改注册键值
的代码即可。下面是用VFP修改注册表的具体实例(一个完整的main.prg程序代码):
#define HKEY—LOCAL—MACHINE -2147483646
*在WindowsAPI编程中,HKEY—LOCAL—MACHINE 被预置为0x80000002,即十进制的-2147483646
clear menu all
set sysme off
注册API函数
Declare Integer RegSetvalue In Win32API integer nHkey,STRING cSubKey, integer dwType,string@ lpDatainteger,integer@ count
/ newvalue即为编译成功后的EXE文件,再次编译时,必须保证项目所生成的.exe文件名为newvalue的值 /
newvalue=″D:\\database\\TEST.exe″
i=len(newvalue)
nResult=RegSetvalue(HKEY—LOCAL—MACHINE,″Software\\Microsoft\\windows\\CurrentVersion\\run″,1,@newvalue,@i)
if nResult#0
wait wind ″修改注册表失败!″
endi
调用表单
do form wb.scx
read event
clea even
quit
运行上述程序之后,打开注册表,进入HKEY—LOCAL—MACHINE\\Software\\Microsoft\\windows\\CurrentVersion\\run,你会发现在该主
键下新添了一项键值,其值正是程序写入的内容“D:\\database\\TEST.exe”。
该程序设计的关键是:在注册表中的RUN下面写入VFP应用程序的名称。所以,你应事先知道编译后VFP程序的名称,否则,往注册表中写入
了不正确的程序名,在Windows启动时,会提示你找不到应用程序。 |