在VFP中操作注册表和INI文件
出处:网络
*-- 程 序 名: WIN32API.PRG
*-- 作 者: Paul G. Brown
*-- 功 能: 对Windows的注册表或WIN.INI file进行操作,也编辑自定义INI文件,退出WINDOWS.
*-- 函数功能: WindowsExit - 关闭windows
*-- ReadRegistry - 读取windows注册表或WIN.INI文件.
*-- WriteRegistry - 存入windows注册表或WIN.INI文件.
*-- ReadINI - 读取一个自定义INI文件.
*-- WriteINI - 存入一个自定义INI文件.
Function WindowsExit
*!* 用于关闭windows, 重新启动,或注消某一用户以另一用户登录.
#Define EW_FORCE 0 && 强行关闭系统, regardless of applications open
#Define EW_LOGOFF 1 && 注消当前用户,出现登录窗口
#Define EW_POWEROFF 2 && 退出windows并关闭系统
#Define EW_RESTART 3 && 重新启动计算机
#Define EW_SHUTDOWN 4 && 退出windows并出现"现在你可以安全地关闭计算机了"的提示信息
*!* 声明函数.
Declare Integer ExitWindowsEx IN WIN32API Integer, Integer
*!* 先确保关闭系统
CLOS ALL
= ExitWindowsEx(3,EW_LOGOFF) &&注销当前用户,重新登录WINDOWS
*!*函数中替换变量可实现其他功能
Function ReadRegistry
*!* 读取 Win9X&NT注册表,在Win3x中将自动读取WIN.INI。
*!* lcSection - 注册表项值
*!* lcKey - 注册表中的主键名
*!* lcDefault - 失败后返回的缺省字符串
*!* lcReturned - 存储结果的字符串
*!* liSize - 返回字符串的大小
*!* lnSize - 返回字符串的字符数量
LPARAMETER lcSection,lcKey
LOCAL lcDefault, lcReturned, liSize, lnSize
IF TYPE("lcSection") # "C" OR TYPE("lcKey")
# "C"
RETURN "Not Found"
ENDIF
lcSection = lcSection + IIF(RIGHT(lcSection,1) = CHR(0),"",CHR(0))
lcKey = lcKey + IIF(RIGHT(lcKey,1) = CHR(0),"",CHR(0))
lcDefault = "Not Found"+CHR(0)
lcReturned = SPACE(120)+CHR(0)
liSize = 120
Declare Integer GetProfileString IN WIN32API String, String, String,
String@,Integer
lnSize = GetProfileString(lcSection,lcKey,lcDefault,@lcReturned,liSize)
CLEAR DLLS
Return LEFT(lcReturned,lnSize)
Function WriteRegistry
*!* 存入windows注册表或WIN.INI文件
*!* lcSection - 注册表项值
*!* lcKey - 注册表主键名
*!* lcString - 写入的字符串
LPARAMETER lcSection, lcKey, lcString
LOCAL lnResult
IF TYPE("lcSection") # "C" OR TYPE("lcKey")
# "C" OR TYPE("lcString") # "C"
RETURN .F.
ENDIF
lcSection = lcSection + IIF(RIGHT(lcSection,1) = CHR(0),"",CHR(0))
lcKey = lcKey + IIF(RIGHT(lcKey,1) = CHR(0),"",CHR(0))
lcString = lcString + IIF(RIGHT(lcString,1) = CHR(0),"",CHR(0))
Declare Integer WriteProfileString IN WIN32API String, String, String
lnResult = WriteProfileString(lcSection,lcKey,lcString)
CLEAR DLLS
RETURN
Function ReadINI
*!* 读取自定义INI文件。每个字符串后必须有一个空字符CHR(0).
*!* lcReturned前的“@”不能省,否则出错
*!* lcSection - INI文件的项名
*!* lcKey - INI文件的键值
*!* lcDefault - 操作失败返回信息
*!* lcReturned - 返回字符串内存变量的句柄
*!* liSize - lcReturned占内存的大小
*!* lcFile - INI文件的路径和文件名
*!* lnSize - 返回字符串的字节数
LPARAMETER lcFile, lcSection, lcKey
LOCAL lcDefault, lcReturned, liSize, lnSize
IF TYPE("lcSection") # "C" OR TYPE("lcKey")
# "C" OR TYPE("lcFile") # "C"
RETURN "Not Found"
ENDIF
lcSection = lcSection + IIF(RIGHT(lcSection,1) = CHR(0),"",CHR(0))
lcKey = lcKey + IIF(RIGHT(lcKey,1) = CHR(0),"",CHR(0))
lcDefault = "Not Found" + CHR(0)
lcReturned = SPACE(120) + CHR(0)
liSize = 120
lcFile = lcFile + IIF(RIGHT(lcFile,1) = CHR(0),"",CHR(0))
Declare Integer GetPrivateProfileString IN WIN32API String, String,
String, string@, Integer, String
lnSize = GetPrivateProfileString(lcSection,lcKey,lcDefault,@lcReturned,liSize,lcFile)
lcReturned = LEFT(lcReturned,lnSize)
CLEAR DLLS
RETURN lcReturned
Function WriteINI
*!* 写自定义INI文件。每个字符串后必须有一个空字符CHR(0).
*!* lcReturned前的“@”不能省,否则出错
*!* lcFile - INI文件名
*!* lcSection - INI文件的项
*!* lcKey - INI文件的键
*!* lcString - 键的赋值
LPARAMETER lcFile, lcSection, lcKey, lcString
LOCAL lnResult
IF TYPE("lcFile") # "C" OR TYPE("lcSection")
# "C" OR TYPE("lcKey") # "C" OR TYPE("lcString")
# "C"
RETURN .F.
ENDIF
Declare Integer WritePrivateProfileString IN WIN32API String, String,
String, String
lcSection = lcSection + IIF(RIGHT(lcSection,1) = CHR(0),"",CHR(0))
lcKey = lcKey + IIF(RIGHT(lcKey,1) = CHR(0),"",CHR(0))
lcString = lcString + IIF(RIGHT(lcString,1) = CHR(0),"",CHR(0))
lcFile = lcFile + IIF(RIGHT(lcFile,1) = CHR(0),"",CHR(0))
lnResult = WritePrivateProfileString(lcSection,lcKey,lcString,lcFile)
CLEAR DLLS
RETURN IIF(lnResult=1,.T.,.F.)
[返回]
|