在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 |