如何获取打印机信息

xiaobear 2009-11-13 04:29:50
我想获得打印机里的纸型及其代号,其中包括自定义纸型,看到其他网站上有段代码好像比较符合,但我想要vfp6的,大家看看能不能帮我转化一下或者有什么其他的好方法,谢谢
#define DC_PAPERS 2
#define DC_PAPERSIZE 3
#define DC_PAPERNAMES 16

DECLARE Long DeviceCapabilities IN winspool.drv ;
String pDevice, String pPort, Long fwCapability, String @ pOutput, Long pDevMode

m.cPrinter = SET( 'Printer' , 2 )
m.iPapers = DeviceCapabilities( m.cPrinter, 'LPT1:', DC_PAPERS, NULL, 0 )

m.cNumbers = REPLICATE( CHR(0), 2 * m.iPapers )
m.cNames = REPLICATE( CHR(0), 64 * m.iPapers )
m.cSizes = REPLICATE( CHR(0), 8 * m.iPapers )

DeviceCapabilities( m.cPrinter, 'LPT1:', DC_PAPERS, @ m.cNumbers, 0 )
DeviceCapabilities( m.cPrinter, 'LPT1:', DC_PAPERNAMES, @ m.cNames, 0 )
DeviceCapabilities( m.cPrinter, 'LPT1:', DC_PAPERSIZE, @ m.cSizes, 0 )

CLEAR
FOR m.ii = 1 TO m.iPapers
m.iNumber = CTOBIN( SUBSTR( m.cNumbers, (m.ii-1)*2+1, 2 ), '2rs' )
m.cName = SUBSTR( m.cNames, (m.ii-1)*64+1, 64 )
m.cName = LEFT( m.cName, AT( CHR(0), m.cName ) - 1 )
m.iWidth = CTOBIN( SUBSTR( m.cSizes, (m.ii-1)*8+1, 4 ), '4rs' )
m.iHeight = CTOBIN( SUBSTR( m.cSizes, (m.ii-1)*8+5, 4 ), '4rs' )
? TEXTMERGE( '<<m.iNumber>>, <<m.cName>>, <<m.iWidth>>x<<m.iHeight>>' )
ENDFOR
STORE '' TO m.cNames, m.cSizes

...全文
238 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobear 2009-11-16
  • 打赏
  • 举报
回复
我刚才试了说ALines(aPaper,cBuff,Chr(10)+Chr(10)) 提示错误,我查了vfp6参数没那么多
xiaobear 2009-11-16
  • 打赏
  • 举报
回复
谢谢,有没有不用那个MyFll.Fll的,我只想得到纸的代码
十豆三 2009-11-16
  • 打赏
  • 举报
回复
以下为 MyFll.Fll 中 PaperInfo() 函数的说明及例子,很明白了

函数名:PaperInfo([cPaperName|nPaperId[,nIdxProperties]])
缩写:ppif
读取纸张信息。
返回值:
字符型或数值型,参数不同,返值也不同。
如果函数执行失败,返回空值""
没有参数时,返回所有纸张信息,字符型,每个纸张信息以两个换行符结为分隔(chr(10)+chr(10)),纸张内的每个信息以一个换行符分融chr(0)
有一个参数时,返回指定纸张信息,以一个换行chr(10)分隔,顺序为:Id,纸张名,宽,高,左边,上边,右边,下边
有两个参数时,返回值除了纸张名为字符型,其它均为整型。第二个参数的取值范围为1-8,分别对应Id,纸张名,宽,高,左边,上边,右边,下边

参数:
[cPaperName|nPaperId]:可选,纸张名称(字符型)或纸张ID(整型)
[nIdxProperties]:可选,整型,参数取值范围为1-8,分别对应Id,纸张名,宽,高,左边,上边,右边,下边
示例代码
*示例 1:显示A4纸的信息:

Set Library To myFll

?"A4纸张的信息为(全部信息):Id,纸张名,宽,高,左边,上边,右边,下边"
?PaperInfo("A4")

?"A4纸张的Id:",PaperInfo("A4",1)&&或P用ID方式PaperInfo(9,1)
?"A4纸张的纸张名:",PaperInfo("A4",2)
?"A4纸张的宽:",PaperInfo("A4",3)
?"A4纸张的高:",PaperInfo("A4",4)
?"A4纸张的左边:",PaperInfo("A4",5)
?"A4纸张的上边:",PaperInfo("A4",6)
?"A4纸张的右边:",PaperInfo("A4",7)
?"A4纸张的下边:",PaperInfo("A4",8)

Set Library To

*示例 2:显示系统所有纸张

Set Library To myFll
cBuff=PaperInfo()
Local ARRAY aPaper[1],aPer[1]
nCount=ALines(aPaper,cBuff,Chr(10)+Chr(10)) &&每张纸是以两个换符结束的

For x=1 to nCount
ALines(aPer,aPaper[x],Chr(10)) &&纸张的每个信息是以一个换符结束的
?"Id:",aPer[1],"纸张名称:",aPer[2],"宽:",aPer[3],"高:",aPer[4],"左边:",aPer[5],"上边:",aPer[6],"右边:",aPer[7],"下边:",aPer[8]
If x%40=0
MessageBox("按回车键继续。。。")
EndIf
EndFor
Set Library To

xiaobear 2009-11-16
  • 打赏
  • 举报
回复
看了,但是没太明白
zxd518518 2009-11-16
  • 打赏
  • 举报
回复
寻找 9.0
十豆三 2009-11-16
  • 打赏
  • 举报
回复
MyFll.Fll 你在百度搜一下,有很多论坛提供下载的。

不要用VFP6.0,现在都在用VFP9.0。功能增进不少,包括 Alines 函数
十豆三 2009-11-14
  • 打赏
  • 举报
回复
推荐你一个更好的工具
MyFll.Fll 中的 PaperInfo() 函数

MyFll.Fll 你在百度搜一下,有很多论坛提供下载的。

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧