学海荡舟手机网

主页 > 实用文摘 > 教育文摘_18 > > 详细内容

在VFP中获取Windows注册信息的方法_信息技术论文

葛晓滨(中国国际电子商务中心安徽代表处)

关键词

 

    在visual foxpro软件的程序设计中,我们经常需要关注其程序设计的环境,尤其是获得windows软件系统注册的用户名及单位名称。为此我们设计了一个在windows 3.x、window 95、windows 98及windows nt 4.0环境下均通用的一个子程序,可以满足上述的需要。

 

#define machine_id -2147483646

#define ver_path "software\microsoft\windows\currentversion"

 

*--声明windows api 函数

declare integer getprofilestring in win32api as getprostr ;

string csection, string ckey, string cdefault, ;

string @cbuffer, integer nbuffersize

 

*-- 声明注册表函数

declare integer regopenkeyex in win32api ;

integer nkey, string @csubkey, integer nreserved,;

integer naccessmask, integer @nresult

 

declare integer regqueryvalueex in win32api ;

integer nkey, string cvaluename, integer nreserved,;

integer @ntype, string @cbuffer, integer @nbuffersize

 

declare integer regclosekey in win32api ;

integer nkey

 

*-- 初始化dll调用变量

outbuffer = space(128)

store 0 to reserved, result, type

buffersize = len(outbuffer)

 

store "" to outuser, outcompany

 

*-- 通过vfp的os()函数判定当前操作系统类型

do case

case upper(os()) = "windows 4"

*-- 系统为windows 95 以上版本

error = regopenkeyex(machine_id, ver_path, ;

reserved, 1, @result)

 

if error = 0

type = 0

outbuffer = space(128)

buffersize = len(outbuffer)

error = regqueryvalueex(result, "registeredowner", reserved, ;

@type, @outbuffer, @buffersize)

 

if error = 0 and outbuffer <> chr(0)

outuser = left(outbuffer, buffersize - 1)

endif

 

type = 0

outbuffer = space(128)

buffersize = len(outbuffer)

error = regqueryvalueex(result, "registeredorganization", reserved, ;

@type, @outbuffer, @buffersize)

 

if error = 0 and outbuffer <> chr(0)

outcompany = left(outbuffer, buffersize - 1)

endif

endif

=regclosekey(result)

 

case upper(os()) = "windows nt"

*-- 系统为windows nt

error = regopenkeyex(machine_id, key_shared_tools_location, ;

reserved, 1, @result)

 

if error = 0

type = 0

outbuffer = space(128)

buffersize = len(outbuffer)

error = regqueryvalueex(result, "registeredowner", reserved, ;

@type, @outbuffer, @buffersize)

 

if error = 0 and outbuffer <> chr(0)

outuser = left(outbuffer, buffersize - 1)

endif

 

type = 0

outbuffer = space(128)

buffersize = len(outbuffer)

error = regqueryvalueex(result, "registeredorganization", reserved, ;

@type, @outbuffer, @buffersize)

 

if error = 0 and outbuffer <> chr(0)

outcompany = left(outbuffer, buffersize - 1)

endif

endif

=regclosekey(result)

 

otherwise

*-- 系统为windows 3.x 版本

outretval = getprostr("ms user info", "defname", "", @outbuffer, buffersize)

outuser = left(outbuffer, outretval)

 

outretval = getprostr("ms user info", "defcompany", "", @outbuffer,buffersize)

outcompany = left(outbuffer, outretval)

 

endcase

 

if error = 0

=messagebox("用户:" + outuser + chr(13) + "单位:" + outcompany)

else

=messagebox("未找到用户及单位。")

endif