📄 位图关联.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 + -