⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfp针对注册表编程.txt

📁 Vfp 文档 一些经典编程文章 可供初学者学习编程时使用
💻 TXT
字号:
在VFP 中 操 作Win95 注 册 表 和INI 文 件 


---- 笔 者 经 常 用Visual FoxPro 开 发 应 用 软 件, 那 么 能 否 实 现 在Visual FoxPro 中 操 作Windows95 注 册 表 呢 ? 答 案 是 肯 定 的。 
一、 利 用registry.prg 操 作Windows95 注 册 表 
---- 在 子 目 录 下 有 一 文 件registry.prg, 利 用 它 可 以 很 方 便 地 操 作Windows95 注 册 表。 
---- 1 . 创 建 主 键 

---- 例 程DemoCreateKey 实 现 在HKEY_CURRENT_USER.0 下 创 建 主 键Opt1。 

PROC demoCreateKey
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER
      -2147483647 && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	frmMyForm. OpenKey("Software.0",;
		HKEY_CURRENT_USER,.T.)
ENDPROC
---- 2 . 检 查 一 个 主 键 是 否 存 在 
---- 例 程DemoCheckKey 检 查HKEY_CURRENT_USER.0 下 是 否 有 主 键Opt1, 存 在 返 回 真, 否 则 返 回 假。 

PROC demoCheckKey
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
  && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	if frmMyForm.IsKey("Software.0",;
		HKEY_CURRENT_USER)
		RETURN .T.
	ELSE
		RETURN .F.
	ENDIF
ENDPROC
---- 2 . 创 建、 修 改 键 值 名 和 键 值 
---- 例 程RegKeyBinary 和RegKeyString 功 能 类 似, 不 同 之 处 在 于 将 键 名DemoItem 的 值 设 置 为 二 进 制 值, 而 且 引 用 的 类 也 不 同。 

PROC regkeybinary
	* set value 00 00 01
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER -2147483647 
    && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("extregistry")
	frmMyForm.init()
	frmMyForm.SetRegKeyBinary
    ("DemoItem",chr(0)+chr(0)+chr(1),;
		"Software.0",;
		HKEY_CURRENT_USER)
ENDPROC
---- 3 . 创 建、 修 改 键 值 名 和 键 值 
---- 如 果HKEY_CURRENT_USER.0 下 不 存 在 键 值 名"DemoItem", 则 例 程RegKeyString 创 建 它, 并 将 其 值 设 置 为 字 符 串"640"。 如 果 该 键 值 名 已 存 在, 而 其 值 不 是 字 符 串"640", 则 将 其 修 改 为"640"。 

PROC regkeystring
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
  && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	frmMyForm.SetRegKey("DemoItem","640",;
		"Software.0",;
		HKEY_CURRENT_USER)
ENDPROC
---- 4 . 读 取 键 值 
---- 例 程GetRegKeyString 读 取HKEY_CURRENT_USER.0 下DemoItem 的 值, 并 将 其 存 放 于 内 存 变 量cValue 中。 

PROC getregkeyString
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
   && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	cvalue=''
	frmMyForm.GetRegKey("DemoItem",@cValue,;
		"Software.0",;
		HKEY_CURRENT_USER)
	return cValue
ENDPROC
---- 5 . 枚 举 某 主 键 的 子 键 
---- 例 程DemoEnumOptionsName 枚 举HKEY_CURRENT_USER.0 下 的 子 键, 并 放 入 一 维 数 组aRegOpts。 

PROC demoEnumOptionsName
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
   && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	DIME aRegOpts[1]
	frmMyForm. EnumOptions(@aRegOpts,;
		"Software.0",HKEY_CURRENT_USER,.T.)
ENDPROC
---- 6 . 枚 举 某 主 键 下 各 键 名 及 其 键 值 
---- 例 程DemoEnumOptionsValue 枚 举HKEY_CURRENT_USER.0 下 各 键 名 及 其 键 值, 并 放 入 二 维 数 组aRegOpts。 

PROC demoEnumOptionsValue
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
   && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	DIME aRegOpts[1]
	frmMyForm. EnumOptions(@aRegOpts,;
   "Software.0",HKEY_CURRENT_USER)
ENDPROC
---- 7 . 删 除 主 键 
---- 例 程DemoDeleteKey 删 除HKEY_CURRENT_USER.0 下 主 键Opt1。 

PROC demoDeleteKey
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647
   && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("registry")
	frmMyForm.init()
	frmMyForm. DeleteKey(HKEY_CURRENT_USER,;
		"Software.0")
ENDPROC
二、 当 键 值 是 二 进 制 值 或DWORD 值 时 
---- 键 值 有 三 种 情 况, 可 能 是 字 符 串、 二 进 制 值 或DWORD 值。 上 述3、4 两 个 例 程 只 适 用 于 键 值 是 字 符 串 的 情 况, 而 对 于 二 进 制 值 或DWORD 值 的 情 况,registry.prg 未 提 供 解 决 方 案, 曾 文 亦 仅 在 文 末 简 单 说 明" 上 面 的 例 子 只 描 述 了 键 值 是 字 符 串 的 情 况", 至 于 键 值 是 二 进 制 值 或DWORD 值 的 情 况 下 如 何 进 行 操 作 仍 不 得 而 知。 笔 者 翻 阅 了 大 量 资 料, 经 过 摸 索, 解 决 了 这 一 问 题。 
---- 1 . 定 义registry 类 的 子 类extregistry, 并 将 其 放 在registry.prg 中 

详 见 程 序 
---- 例 程RegKeyDword 和RegKeyBinary 功 能 类 似, 不 同 之 处 在 于 将 键 名DemoItem 的 值 设 置 为DWORD 值。 请 注 意 这 里 的 字 节 顺 序 和 RegKeyBinary 中 设 置 二 进 制 值 时 字 节 顺 序 不 同, 而 且 键 值 长 度 必 须 为 四 字 节, 否 则 也 不 能 正 确 设 置。 
PROC regkeydword
	*set value 0x00000001 (1)
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER -2147483647 && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("extregistry")
	frmMyForm.init()
	frmMyForm.SetRegKeyDword("DemoItem", 
     chr(1)+chr(0)+chr(0)+chr(0),;
		"Software.0",;
		HKEY_CURRENT_USER)
ENDPROC
---- 3 . 读 取 键 值 
---- 例 程GetRegKeyBinary 和GetRegKeyString 功 能 类 似, 不 同 之 处 在 于 前 者 用 于 读 取 二 进 制 键 值, 而 且 二 者 引 用 的 类 也 不 同。 

---- 例 程GetRegKeyBinary 将 键 值 以 字 符 串 形 式 存 放 于cValue 中, 此 字 符 串 可 能 包 含 不 可 显 示 字 符, 因 此 要 调 用 例 程toBinaryChar 进 行 转 换, 并 把 结 果 存 放 于 字 符 型 内 存 变 量cRetValue 中, 可 以 用? cRetValue 命 令 输 出 到 屏 幕。 

PROC getregkeyBinary
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER -2147483647 
     && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("extregistry")
	frmMyForm.init()
	cvalue=''
	frmMyForm.GetRegKeyBinary("DemoItem",@cValue,;
		"Software.0",;
		HKEY_CURRENT_USER)
	length=LEN(m.cValue)
	cRetValue=''
	FOR i=1 TO length
		cRetValue=cRetValue+tobinarychar
        (SUBS(m.cValue,i,1))+' '
	ENDFOR
	return cRetValue
ENDPROC
PROC toBinaryChar
	LPARAMETER cchar
	LOCAL nInt,nmod,bcbinarychar1,bcbinarychar2
	ntemp=INT(ASC(cchar)/16)
	STORE '' TO bcbinarychar1,bcbinarychar2
	DO CASE
	CASE ntemp=10
		bcbinarychar1='a'
	CASE ntemp=11
		bcbinarychar1='b'
	CASE ntemp=12
		bcbinarychar1='c'
	CASE ntemp=13
		bcbinarychar1='d'
	CASE ntemp=14
		bcbinarychar1='e'
	CASE ntemp=15
		bcbinarychar1='f'
	OTHERWISE
		bcbinarychar1=STR(ntemp,1)
	ENDCASE
	nmod=ASC(cchar)-ntemp*16
	DO CASE
	CASE nmod=10
		bcbinarychar2='a'
	CASE nmod=11
		bcbinarychar2='b'
	CASE nmod=12
		bcbinarychar2='c'
	CASE nmod=13
		bcbinarychar2='d'
	CASE nmod=14
		bcbinarychar2='e'
	CASE nmod=15
		bcbinarychar2='f'
	OTHERWISE
		bcbinarychar2=STR(nmod,1)
	ENDCASE
	RETURN bcbinarychar1+	bcbinarychar2
ENDPROC
---- 例 程GetRegKeyDword 和GetRegKeyBinary 功 能 类 似, 不 同 之 处 在 于 前 者 用 于 读 取DWORD 值。 二 者 都 调 用 了 例 程toBinaryChar, 但 转 换 字 节 的 先 后 顺 序 不 同。 
PROC getregkeydword
	SET PROC TO registry
	#DEFINE HKEY_CURRENT_USER  -2147483647 && BITSET(0,31)+1
	frmMyForm = CREATEOBJECT("extregistry")
	frmMyForm.init()
	cvalue=''
	frmMyForm.GetRegKeyDword("DemoItem",@cValue,;
		"Software.0",;
		HKEY_CURRENT_USER)
	length=LEN(m.cValue)
	cRetValue=''
	FOR i=length TO 1 STEP -1
		cRetValue=cRetValue+tobinarychar
        (SUBS(m.cValue,i,1))
	ENDFOR
	cRetValue='0x'+iif(LEN(cRetValue) >=8,cRetValue,;
		REPLICATE('0',8-LEN(cRetValue))+cRetValue)
	* cval 是 十 进 制 的
	cVal=0
	FOR i=1 TO length
		cVal=cVal+ASC(SUBS(m.cValue,i,1))*256^(i-1)
	ENDFOR
	RETURN cRetValue+'('+STR(cVal)+')'
ENDPROC
三、 操 作INI 文 件 
---- 利 用registry.prg 不 仅 可 以 操 作Windows95 注 册 表, 还 可 以 操 作INI 文 件, 如WIN.INI,WINFILE.INI 等。 
---- 1 . 读 取 某 节(SECTION) 下 所 有 键 名(Entries) 

---- 例 程DemoGetIniSection 读 取C:.INI 中 节Settings 下 所 有 键 名, 并 将 之 存 放 于 数 组aSection 中。 

PROC demoGetIniSection
	SET PROC TO registry
	frmMyForm = CREATEOBJECT("oldinireg")
	DIME aSections[1]
	frmMyForm.GetINISection
     (@aSections,"SETTINGS",'C:.INI')
ENDPROC
---- 2 . 读 取 键 值 

---- 例 程DemoGetIniEntry 读 取C:.INI 中 节Windows 下 键 名 为Device 的 键 值, 并 将 其 放 入 字 符 型 内 存 变 量cValue 中。 

PROC demoGetIniEntry
	SET PROC TO registry
	frmMyForm = CREATEOBJECT("oldinireg")
	cValue=''
	frmMyForm.GetINIEntry(@cValue,
   "WINDOWS","DEVICE",'C:.INI')
ENDPROC
---- 3 . 修 改 键 值 
---- 例 程DemoWriteIniEntry 将C:.INI 中 节Windows 下 键 名 为load 的 键 值 修 改 为"notepad.exe"。 

PROC demoWriteIniEntry
	SET PROC TO registry
	frmMyForm = CREATEOBJECT("oldinireg")
	frmMyForm.WriteINIEntry('notepad.exe',
    "WINDOWS","load",'C:.INI')
ENDPROC
---- 以 上 例 程 均 在Visual FoxPro5.0 和Windows95 环 境 下 调 试 通 过。    免 费 订 阅  
实用技巧分类
 
Office应用 
CAD 
C、C++ 
数据库应用 
Delphi  
Internet应用 
Java 
Notes应用 
操作系统应用 
PowerBuilder 
VB 
Visual Foxpro 
其他类 
上周 排行榜 
如 何 投 稿 ? 

 

在日常的工作生活中,我们对计算机软硬件技术的应用开发肯定有许多的心得体会,拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的;小的点点滴滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二字,知他人所不知,这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人在这里都有所收获... 



  中国惠普
  3Com中国
  Motorola中国
  联想科技
  CA中国
  Cabletron
  Sony在中国

 
 

--------------------------------------------------------------------------------

中国计算机世界出版服务公司版权所有 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -