2,723
社区成员
发帖
与我相关
我的任务
分享
*操作注册表
*语法:
*创建子键:registry(0,主键序号,子键名,新建子键名)
*写注册表:registry(1,主键序号,子键名,,注册项,项目值,值类型)
*读注册表:registry(2,主键序号,子键名,,注册项)
*删除子键:registry(3,主键序号,子键名)
?registry(3,3,'Software\HAKA_test\数据库设置') && 参数2的值3表示:HKEY_LOCAL_MACHINE
Function registry
Parameters nReg_code,;&&操作代码,0-创建子键,1-写注册表,2-读注册表,3-删除注册表项
nReg_MainKeyNo,; &&注册表主键序号
cReg_skey,; &&子键
cReg_skey_New,; &&需创建的子键
cReg_skeyname,; &&注册表项
cReg_keyvalue,; &&注册表项的值
nReg_ValueType &&注册表项的值的类型,1-数据串(REG_SZ),2-Unicode 串,3-二进制(REG_BINARY),4-32-位数值(REG_DWORD)
On Error Return .F.
Local nDisposition,;
lnResult,; &&要取得值的注册表子项的地址
nResult,;
ReturnValue,; &&返回的注册表值
nKeyLength,; &&要写的值的长度
Buffer,; &&返回注册表项值
BufferSize,; &&返回值的长度
lnError,; &&返回注册表函数的错误代码
nError,; &&返回的错误代码
skey1,skey2
If !Between(nReg_MainKeyNo,1,4)
Return .F.
Endif
If nReg_code=1 And !Between(nReg_ValueType,1,4)
Return .F.
Endif
nReg_MainKeyNo=nReg_MainKeyNo-2147483649
*注册表键值访问权限
#Define KEY_ALL_ACCESS 983103 &&所有权限
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 RegCreateKeyEx In WIN32API;
INTEGER hKey,; &&一个打开项的句柄,或者一个标准项名
String lpSubKey,; &&欲创建的新子项的名字
Integer Reserved,; &&设为零
String lpClass,; &&项的类名
Integer dwOptions,; &&零,这个项不正式保存下来,系统重新启动后会消失
Integer samDesired,; &&访问权限
Integer lpSecurityAttributes,;&&对这个项的安全特性进行描述的一个结构,零
Integer @phkResult,; &&指定用于装载新子项句柄的一个变量
Integer @lpdwDisposition &&返回是新建子项,还是打开子项(如果新建的子项存在)
Declare RegDeleteKey In WIN32API;
INTEGER hKey,;
STRING lpSubKey
Declare Integer RegCloseKey In Win32API Integer nKey
Declare Integer RegSetValueEx In Win32API;
INTEGER hKey,;
STRING lpValueName,;
INTEGER Reserved,;
INTEGER dwType,;
STRING lpData,;
INTEGER cbData
Do Case
Case nReg_code=0 &&创建子建
nResult= 0
nDisposition = 0
nError = RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey,0, KEY_ALL_ACCESS, @nResult)
If nError#0
Messagebox('Can`t open the sub_key!',0+48,'INF')
Return .F.
Endif
nError=RegCreateKeyEx(nResult,cReg_sKey_New,0,'nReg_ValueType',0,KEY_ALL_ACCESS,0,@lnResult,@nDisposition)
=RegCloseKey(nResult)
Return nError
**************************************************************************************
Case nReg_code=1 &&写注册表
nError=0
nError =RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey, 0,KEY_ALL_ACCESS, @lnResult)
If nError#0
Messagebox('Can`t write the sub_key!',0+48,'INF')
Return .F.
Endif
nKeyLength=Len(cReg_KeyValue)
nError=RegSetValueEx(lnResult,cReg_sKeyName,0,nReg_ValueType, @cReg_KeyValue, @nKeyLength)
=RegCloseKey(lnResult)
Return nError=0
***************************************************************************
Case nReg_code=2 &&读注册表
ReturnValue = ""
lnResult = 0
Buffer = Space(128)
BufferSize = 128
lnError = RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey, 0, KEY_ALL_ACCESS, @lnResult)
If lnError = 0
lnType = 0
lnError = RegQueryValueEx(lnResult, cReg_skeyname, 0, @lnType, @Buffer, @BufferSize)
If lnError = 0 And Buffer <> Chr(0) &&如果错误码为 0, 则正常读取值.
ReturnValue = Left(Buffer, BufferSize - 1) &&取得返回值
Endif
Endif
=RegCloseKey(lnResult)
Return ReturnValue
**************************************************************************************
Case nReg_code=3 &&删除注册表项
skey1=Left(cReg_sKey,At('\',cReg_sKey,Occurs('\',cReg_sKey))-1)
skey2=Subst(cReg_sKey,At('\',cReg_sKey,Occurs('\',cReg_sKey))+1)
nError =RegOpenKeyEx(nReg_MainKeyNo,sKey1, 0,KEY_ALL_ACCESS, @lnResult)
If nError#0
Messagebox('Can`t delete the sub_key!',0+48,'INF')
Return .F.
Else
nError=RegDeleteKey(lnResult,sKey2)
Endif
Return nError
Endcase
Endfunc