QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3616|回复: 0
打印 上一主题 下一主题

几个打印机的API函数

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

$ \6 l) K0 f. Y- \! t

前几天写程序用到几个打印的API函数.把研究成果和大家分享

+ r4 f: B1 b9 a) ^$ n# d3 W

建议大家结合MSDN看看

2 W7 z& m) g8 `. |- @) x: N9 o3 L* E

Private Type PRINTER_INFO_1

1 O5 P6 ?4 r6 T9 M: o

Flags As Long

B% T, m9 H' a/ X

pDescription As Long

+ a3 h& t; j- t+ N+ z# d* Z

pName As Long

; Z6 N5 q- }! N. `4 p

pComment As Long

* q* Z) S) g: H3 C" U( S, o3 |

End Type

6 ?) ^' F$ B, ]6 @5 ^1 r& X7 j/ q5 X

Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As

! r% d- O! n! w& x

Long, ByVal hPrinter As Long) As Long

! B. K7 }! _6 {) Z# A, }4 w7 p

Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As

$ K. W. E1 ]) z& F% t3 h

Long) As Long

1 e; I/ a4 ?' t: V; ]: g

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"

! D, ~7 F% y% d7 ?, k0 D

(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long

) F* J, u% t0 ?% E* }# W& ~& j

Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (

- ~3 H5 B4 H) Y: K* w: D6 \6 b

ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As

$ {: h3 ] Z# {: U

Long, pcbNeeded As Long) As Long

5 [% @4 I; P: V- b: B0 N M8 ?; J

Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _

' M9 \1 q& i- [% h8 z; T

(ByVal lpString1 As String, ByVal lpString2 As Long) As Long

6 r& `, [3 A5 ?/ k

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt

5 @1 G8 N. f" j6 L. o( R! U

ring As Long) As Long

( R4 n% a/ P7 p$ S( p' p2 C

GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向

6 H9 J$ n: r$ c: x; L0 T6 w9 v

一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.

% M4 y- B: y6 b3 K. e m( h$ b! b8 ~

在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.

/ f3 _: s0 t, X: ?6 | ?8 J

下面是 例程:得到打印机的类型名

6 c; ]% } j1 e% `. e! _

'pDeviceName是打印机名

: Y9 I) Z" ]8 Y# i: p# r

'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序

y% m& y- j9 N

Private Sub GetPrint(pDeviceName, pType As String)

- R _/ V ~( S9 X

Dim pIn As PRINTER_INFO_1

) d& }. Z& j$ T* Z; V" l

Dim s As String * 256

/ f! h Y+ c9 Y4 z/ p) M( v

Dim r As Long, phPrinter As Long, r1 As Long

; T6 R' b" `+ {& T

On Error Resume Next

2 _ U; t# W2 B

r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)

; y! o: t5 W. f* A' R% r

If r = 0 Then Exit Sub

$ F4 P$ E/ P8 u5 G l- b$ y

r = GetPrinter(phPrinter, 1, 0, 0, r1)

+ n8 W9 w) Q3 F

ReDim pPrinter(r1) As Byte

6 Y) B/ ^9 V% j- e ?

r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)

' F0 J# u6 ]5 N( U; a$ N" _) C( w

If r = 0 Then Exit Sub

* ~6 a8 I7 `% p# @

r = ClosePrinter(phPrinter)

& k- i, @- b5 E. @* `) T2 ~

CopyMemory pIn, pPrinter(0), Len(pIn)

7 ^" X3 @0 H5 Z# ^4 b1 a5 o 2 ? s- C: z+ h; x3 k

r1 = lstrlen(pIn.pDescription)

- g+ l7 ? ~: @ r0 B# W

r = lstrcpy(s, pIn.pDescription)

# H, [/ A5 E3 u9 K% Y3 q! H

If r = 0 Then Exit Sub

U: g6 F( S: @" ^

pType = Left(s, r1)

; [0 d' u$ x d9 \* Z2 D8 x8 y

r1 = InStr(1, pType, ",")

* Y0 F& h# ]9 k

r = InStr(r1 + 1, pType, ",")

8 |; w B% g4 g# d5 h' n& b0 `

pType = Mid(pType, r1 + 1, r - r1 - 1)

; k% N# Z k$ Y4 A# q s0 ~

End Sub

X8 l- @& z, p; _( G- j0 X

PrinterProperties函数比较简单.你试试吗?

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-5-5 22:16 , Processed in 0.401588 second(s), 52 queries .

回顶部