打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
编程入门网-保存打印机与打印纸的设置
 保存打印机与打印纸的设置
出处:网络
 
用sys(1037)设置打印机与打印纸,怎样保存其设置,下次系统启动时调出?
*可以在打印时设置纸张,适应不同的纸型
FUNCTION Prn_Pg
*在打印代码上行调用
*调用格式:Prn_Pg(Hight,Width)
*Hight:打印纸的长度,取值范围依据打印机的范围,必须是数字
* Epson LQ-1600KII的取值范围:127--23119(单位:0.1毫米)
*Width:打印纸的宽度,取值范围依据打印机的范围,必须是数字
* Epson LQ-1600KII的取值范围:127--4191(单位:0.1毫米)

PARAMETERS _Hight, _Width
#DEFINE HKEY_LOCAL_MACHINE -2147483646
Local nKey, cSubKey, cvalue, cvalueRead, lSuccess, cvalueToWrite, H_Width, H_Hight
nKey = HKEY_LOCAL_MACHINE
cvalue = "Default DevMode"
*读注册表中的默认打印机名
cSubKey2='Config\0001\System\CurrentControlSet\Control\Print\Printers'
cvalue2='default'
cdefa_prn = ReadREG_SZ(nKey, cSubKey2, cvalue2)
*
cSubKey = "System\CurrentControlSet\Control\Print\Printers\"+cdefa_prn
H_Width = Iif(Len(Dec10To16Hex(_Width))=3,"0"+Dec10To16Hex(_Width), ;
Iif(Len(Dec10To16Hex(_Width))=2,"00"+Dec10To16Hex(_Width),Dec10To16Hex(_Width)))
H_Width = Substr(H_Width,3,2)+Substr(H_Width,1,2) &&将设置的十进制的宽度值转换为16进制
H_Hight = Iif(Len(Dec10To16Hex(_Hight))=3,"0"+Dec10To16Hex(_Hight), ;
Iif(Len(Dec10To16Hex(_Hight))=2,"00"+Dec10To16Hex(_Hight),Dec10To16Hex(_Hight)))
H_Hight = Substr(H_Hight,3,2)+Substr(H_Hight,1,2) &&将设置的十进制的长度值转换为16进制
*
cvalueRead = ReadREG_SZ(nKey, cSubKey, cvalue)
IF (EMPTY(cvalueRead)) THEN
Return(.F.) &&读注册表错误
ELSE
lenght = Len(cvalueRead)
cRetvalue = Space(0)
For i=1 To lenght
cRetvalue = cRetvalue+BinaryToChar(Substr(cvalueRead,i,1))&&
EndFor
ENDIF
cRetvalue = Stuff(cRetvalue,93,4,"0001") &&设置默认纸张为自定义纸
cRetvalue = Stuff(cRetvalue,97,8,H_Hight+H_Width) &&设置自定义纸张的长度,宽度
lenght = Len(cRetvalue)/2
Binarychar = Space(0)
For k=1 To lenght
Binarychar = Binarychar+Chr(Hex16To10Dec(Substr(cRetvalue,(k-1)*2+1,2)))
EndFor
cvalueToWrite = Binarychar
*_______
lSuccess = WriteREG_SZ(nKey, cSubKey, cvalue, cvalueToWrite)
IF (lSuccess) THEN
Return(.T.) &&设置成功返回.T.
ELSE
Return(.F.) &&设置失败返回.F.
ENDIF
Return
***************
FUNCTION ReadREG_SZ
PARAMETERS nKey, cSubKey, cvalue
#DEFINE REG_BINARY 3
* WIN 32 API functions that are used
DECLARE Integer RegOpenKey IN Win32API ;
Integer nHKey, String @cSubKey, Integer @nResult
DECLARE Integer RegQueryvalueEx IN Win32API ;
Integer nHKey, String lpszvalueName, Integer dwReserved,;
Integer @lpdwType, String @lpbData, Integer @lpcbData
DECLARE Integer RegCloseKey IN Win32API Integer nHKey
* Local variables used
Local nErrCode, nKeyHandle, lpdwvalueType, lpbvalue, lpcbvalueSize, lpdwReserved
* Initialize the variables
nKeyHandle = 0
lpdwReserved = 0
lpdwvalueType = REG_BINARY
lpbvalue = ""
nErrCode = RegOpenKey(nKey, cSubKey, @nKeyHandle)
* If the error code isn't 0, then the key doesn't exist or can't be opened.
IF (nErrCode # 0) THEN
RETURN ""
ENDIF
lpcbvalueSize = 1
* Get the size of the data in the value
nErrCode=RegQueryvalueEx(nKeyHandle, cvalue, lpdwReserved, @lpdwvalueType, @lpbvalue, @lpcbvalueSize)
* Make the buffer big enough
lpbvalue = SPACE(lpcbvalueSize)
nErrCode=RegQueryvalueEx(nKeyHandle, cvalue, lpdwReserved, @lpdwvalueType, @lpbvalue, @lpcbvalueSize)
=RegCloseKey(nKeyHandle)
IF (nErrCode # 0) THEN
RETURN ""
ENDIF
lpbvalue = LEFT(lpbvalue, lpcbvalueSize - 1)
RETURN lpbvalue
* End of Code

FUNCTION WriteREG_SZ
PARAMETERS nKey, cSubKey, cvalue, cvalueToWrite
#DEFINE REG_BINARY 3
* WIN 32 API functions that are used
DECLARE Integer RegOpenKey IN Win32API ;
Integer nHKey, String @cSubKey, Integer @nResult
DECLARE Integer RegSetvalueEx IN Win32API ;
Integer hKey, String lpszvalueName, Integer dwReserved,;
Integer fdwType, String lpbData, Integer cbData
DECLARE Integer RegCloseKey IN Win32API Integer nHKey
* Local variables used
Local nErrCode, nKeyHandle, lpdwvalueType, lpbvalue, lpcbvalueSize, lpdwReserved
* Initialize the variables
nKeyHandle = 0
lpdwReserved = 0
lpdwvalueType = REG_BINARY
lpbvalue = cvalueToWrite
nErrCode = RegOpenKey(nKey, cSubKey, @nKeyHandle)
* If the error code isn't 0, then the key doesn't exist or can't be opened.
IF (nErrCode # 0) THEN
RETURN .F.
ENDIF
lpcbvalueSize = LEN(lpbvalue) && Store the length of the string
nErrCode=RegSetvalueEx(nKeyHandle, cvalue, lpdwReserved, lpdwvalueType, lpbvalue, lpcbvalueSize)
=RegCloseKey(nKeyHandle)
IF (nErrCode # 0) THEN
RETURN .F.
ENDIF
RETURN .T.
* End of Code

FUNCTION BinaryToChar &&二进制转换成16进制
PARAMETERS cchar
Local nint,nmod,char1,char2
ntemp = Int(Asc(cchar)/16)
Store "" To char1,char2
Do Case
Case ntemp = 10
char1 = "a"
Case ntemp = 11
char1 = "b"
Case ntemp = 12
char1 = "c"
Case ntemp = 13
char1 = "d"
Case ntemp = 14
char1 = "e"
Case ntemp = 15
char1="f"
OtherWise
char1 = Str(ntemp,1)
EndCase
nmod = Asc(cchar)-ntemp*16
Do Case
Case nmod = 10
char2 = "a"
Case nmod = 11
char2 = "b"
Case nmod = 12
char2 = "c"
Case nmod = 13
char2 = "d"
Case nmod = 14
char2 = "e"
Case nmod = 15
char2 = "f"
OtherWise
char2 = Str(nmod,1)
EndCase
Return char1+char2

FUNCTION Hex16To10Dec &&16进制到十进制
* Converts POSITIVE decimal integers to hex (Char).
* Input: NUMERIC
* Output: CHAR
PARAMETER InNum
OutStr = 0
For I = 1 To Len(InNum)
OutStr = FindHex(Right(InNum,1))*16^(i-1)+OutStr
InNum = Substr(InNum,1,Len(InNum)-1)
EndFor
RETURN(OutStr)
FUNCTION FindHex &&16进制到十进制的内部函数
* Lookup table for conversion of alpha hex chars.
* Input: NUMERIC
* Output: VAL
PARAMETERS InVal && Integer
Private All Like j*
Do Case
Case InVal = "a"
jOutStr = 10
Case InVal = "b"
jOutStr = 11
Case InVal = "c"
jOutStr = 12
Case InVal = "d"
jOutStr = 13
Case InVal = "e"
jOutStr = 14
Case InVal = "f"
jOutStr = 15
OtherWise
jOutStr = Val(InVal)
EndCase
Return(jOutStr)
FUNCTION Dec10To16Hex &&十进制到16进制
* Converts POSITIVE decimal integers to hex (Char).
* Input: NUMERIC
* Output: CHAR
PARAMETER InNum
OutStr = Space(0)
Do While InNum>0
OutStr = Find16Hex(Mod(InNum,16))+OutStr
InNum = Int(InNum/16)
Enddo
Return(OutStr)
FUNCTION Find16Hex &&十进制到16进制的内部函数
* Lookup table for conversion of alpha hex chars.
* Input: NUMERIC
* Output: CHAR
PARAMETERS InVal && Integer
Private All Like j*
Do Case
Case InVal = 10
jOutStr = "a"
Case InVal = 11
jOutStr = "b"
Case InVal = 12
jOutStr = "c"
Case InVal = 13
jOutStr = "d"
Case InVal = 14
jOutStr = "e"
Case InVal = 15
jOutStr = "f"
OtherWise
jOutStr = STR(InVal,1,0)
EndCase
Return(jOutStr)
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
电子表头数据读取并转换
初学入门:JAVA里字符编码的探索与理解 - 全部文章 - 技术学习
C语言中可变参数的用法与实例
使用Python,如何从具有多个可变长度记录的二进制数据文件中读取和提取数据?
C/C++: 十六进制转10进制源码
字符串转换进制数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服