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

📄 位图关联.prg

📁 通用题库组卷系统 1.本来是一个学生的本科毕业课题
💻 PRG
字号:
*//WIN32API宣告
*//开启机码
DECLARE INTEGER RegOpenKey IN Win32API INTEGER nHKey,;
	STRING cSubKey, INTEGER @nHandle
*//建立机码
DECLARE Integer RegCreateKey  IN Win32API  INTEGER nHKey,;
	STRING cSubKey, INTEGER @nHandle
*//关闭开启的机码
DECLARE Integer RegCloseKey  IN Win32API  INTEGER nHKey
*//删除机码
DECLARE INTEGER RegDeleteKey IN Win32API  INTEGER nHKEY,;
	STRING cSubkey
*//删除某一机码下的值
DECLARE INTEGER RegDeleteValue IN Win32API INTEGER nHKEY,;
	STRING cEntry

#DEFINE HKEY_CLASSES_ROOT       -2147483648
#DEFINE HKEY_CURRENT_USER       -2147483647
#DEFINE HKEY_LOCAL_MACHINE      -2147483646
#DEFINE HKEY_USERS              -2147483645
#DEFINE ERROR_SUCCESS            0


=createRegistryKey(HKEY_CLASSES_ROOT,".bmp")  &&如果bmp未生成自动生成
if ReadRegistryString(HKEY_CLASSES_ROOT,".bmp","")<>"Paint.Picture"  &&如果bmp相对应的键值不是画笔,强行修改
  ? WriteRegistryString(HKEY_CLASSES_ROOT,".bmp","","Paint.Picture")
endif
=createRegistryKey(HKEY_CLASSES_ROOT,".jpg")  &&如果bmp未生成自动生成
if ReadRegistryString(HKEY_CLASSES_ROOT,".jpg","")<>"Paint.Picture"  &&如果bmp相对应的键值不是画笔,强行修改
  ? WriteRegistryString(HKEY_CLASSES_ROOT,".jpg","","Paint.Picture")
endif
clear dlls


**************************************************
***  删除机码 DeleteRegistryKey
***  注意:删除机码将导致机码下的值全数被删除
***  传回值:.T.表成功,.NULL.表无此机码
**** 举例:    ? DeleteRegistryKey(HKEY_CLASSES_ROOT,".jpeg")
*****          这样删除jpeg的主键
**************************************************
proc DeleteRegistryKey
PARAMETERS HKEY,SubKey
LOCAL nResult, nHandle
nHandle=0
nResult=RegOpenKey(HKey,SubKey,@nHandle)
IF nResult#ERROR_SUCCESS
   *//机码不存在或无法开启
   RETURN .NULL.
ENDIF   
nResult=RegDeleteKey(HKey,SubKey)
=RegCloseKey(nHandle)
IF nResult#ERROR_SUCCESS
   RETURN .NULL.
ENDIF
RETURN .T.

**************************************************
***  建立机码 createRegistryKey
***  传回值:.T.表成功,.NULL.表无此机码
**** 举例:    ? DeleteRegistryKey(HKEY_CLASSES_ROOT,".jpeg")
*****          这样删除jpeg的主键
**************************************************
proc createRegistryKey
PARAMETERS HKEY,SubKey
LOCAL nResult, nHandle
nHandle=0
nResult=RegOpenKey(HKey,SubKey,@nHandle)
IF nResult#ERROR_SUCCESS
   *//机码不存在或无法开启
	DECLARE Integer RegCreateKey IN Win32API ;
			Integer nHKey, String @cSubKey, Integer @nResult
    nResult=RegCreateKey(HKey,SubKey,nResult)
ENDIF   
=RegCloseKey(nHandle)
IF nResult#ERROR_SUCCESS
   RETURN .NULL.
ENDIF
RETURN .T.

**************************************************
***  读取字串值 ReadRegistryString
***  传回值:字串或.NULL.表无此机码
***  ? ReadRegistryString(HKEY_CLASSES_ROOT,".bmp","")
****  将回值:  paint.picture .t.
***  ? ReadRegistryString(HKEY_CLASSES_ROOT,".bmp","Content Type")
****  将回值:  image/bmp .t.
**************************************************
proc ReadRegistryString
PARAMETERS HKey, Subkey, Entry
LOCAL nHandle, nResult, nSize, cDataBuffer, nType
nHandle=0
*//开启机码
nResult=RegOpenKey(HKey,SubKey,@nHandle)
IF nResult#ERROR_SUCCESS
   RETURN .NULL.
ENDIF   
*// 使用RegQueryValueEx决定资料型态
DECLARE INTEGER RegQueryValueEx  IN Win32API  INTEGER nHKey,;
	STRING lpszValueName,INTEGER dwReserved,;
	INTEGER @lpdwType, STRING @lpbData, INTEGER @lpcbData
*//将值传回 buffer
cDataBuffer=space(256)
nSize=LEN(cDataBuffer)
nType=0
nResult= RegQueryValueEx(nHandle,Entry,0,@nType,@cDataBuffer,@nSize)
=RegCloseKey(nHandle)
IF nResult#ERROR_SUCCESS 
   RETURN .NULL.
ENDIF   
IF nSize <2 
  RETURN "" 
*//空字串 
ENDIF 
*//去除空白字元及字串後的 NULL 
RETURN SUBSTR(CHRTRAN(cDataBuffer,CHR(0),""),1,nSize-1)


************************************************** *** 
*写入字串值 WriteRegistryString *** 传回值:.T.成功,.NULL.失败 
*  ? WriteRegistryString(HKEY_CLASSES_ROOT,".bmp","","Paint.Picture")
*  nResult=RegSetValueEx(nHandle,Entry,0,1,Value,nSize)
*  其中该句有一个参数                    $  0二进制  1字符
 ************************************************** 
proc WriteRegistryString
PARAMETERS HKey, Subkey, Entry, Value 
LOCAL nHandle, nResult, nSize, cDataBuffer, nType
nHandle=0
nResult=RegOpenKey(HKey,SubKey,@nHandle)
IF nResult#ERROR_SUCCESS
  RETURN .NULL. 
ENDIF 
DECLARE INTEGER RegSetValueEx IN Win32API INTEGER nHKey,;
 STRING lpszEntry,INTEGER dwReserved,;
  INTEGER fdwType, STRING lpbData, INTEGER cbData 
nSize=LEN(Value)
nResult=RegSetValueEx(nHandle,Entry,0,1,Value,nSize)
=RegCloseKey(nHandle) 
IF nResult# ERROR_SUCCESS
  RETURN .NULL. 
ENDIF 
RETURN .T. 

**************************************************
* 使用方式: CurrentVersion="1.0" 

⌨️ 快捷键说明

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