QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

, C& y% F: p' U3 _" V h1 e

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

U" E) e+ H" z! x/ N) {" s% {

建议大家结合MSDN看看

' P! {. F( z8 }& j

Private Type PRINTER_INFO_1

$ U) c2 n7 N7 f

Flags As Long

* O7 O2 Y3 m8 w9 G' j

pDescription As Long

# R5 R: d' j1 G! S: w4 D& k& g

pName As Long

% _9 N, O8 s* K( w6 ]

pComment As Long

4 f6 e- {' `' _! k+ [& s$ F

End Type

1 o- o1 F- s+ U8 U w

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

9 a$ c. a5 M8 C7 f8 h* h2 ^6 ^

Long, ByVal hPrinter As Long) As Long

4 u4 b/ |' Y; Y/ D- ^! K, _

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

, e' I& Q E W3 H: [7 H+ V5 e

Long) As Long

/ c; x1 J& K% c2 ]/ m4 k' W

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

( t# k( u) b2 Q" _

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

* G7 |: b1 N$ ^( n- {9 M( \/ G S: s

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

% f$ \ M" a0 q1 |) w

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

& U6 h& Y. |, h; C P

Long, pcbNeeded As Long) As Long

6 e5 w) j; L- {4 C' ?% u, F

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

9 E8 B2 M( j( p9 b5 Z

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

B7 s* P1 f& \; y. O* `

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

( ^( W" |) f# I5 e) v0 ?) I

ring As Long) As Long

% ?. [; F4 J0 j3 z9 p

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

/ S# ?7 b$ d, l/ V" e' N

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

1 \: i& a, }: v- |. g3 ~4 [/ d

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

1 X( [% j) T4 x+ x

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

( E$ C4 s2 M" G& i B

'pDeviceName是打印机名

) L6 l2 R* C1 g6 k+ U h6 T+ T

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

' Q/ r+ k: n: L! O0 S

Private Sub GetPrint(pDeviceName, pType As String)

( `+ ]5 I1 k' C* Q

Dim pIn As PRINTER_INFO_1

/ o/ a" c& F0 A( G: x, [4 y9 |

Dim s As String * 256

# e% g$ c. j% x* Y4 J

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

' n% O5 G6 {# o$ {5 W

On Error Resume Next

3 }; B2 ]* i+ a. g

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

, r. Y5 Z+ U0 K }

If r = 0 Then Exit Sub

- W! d3 t6 V1 P' ^1 ^7 s. B" y1 T

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

/ |( r) x+ T5 A' [0 b

ReDim pPrinter(r1) As Byte

6 ?; J! u* V) a2 p0 [/ J) y4 Q

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

6 S' n1 S1 s" z+ s5 r1 E

If r = 0 Then Exit Sub

) F9 t1 p* M3 M! ]& y; d" T' e

r = ClosePrinter(phPrinter)

8 O, E7 L) W# h+ v

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

. x7 ~; v9 h: ?! y- B o j1 L, J7 p+ J$ f2 _, {3 A7 |

r1 = lstrlen(pIn.pDescription)

, P* A* a% P9 r- ]6 u/ N

r = lstrcpy(s, pIn.pDescription)

' N) ?+ |( r3 y

If r = 0 Then Exit Sub

& `% E( R. S: P v. C

pType = Left(s, r1)

6 L+ u$ L! U, j9 a/ G& N0 L

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

- Z7 @9 R, x- C! ^

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

0 ~ ]: z0 k- n

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

' |( A# l+ F1 v# c7 k. |

End Sub

$ m8 k0 r) ^0 y7 k9 E- Y7 D4 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-6-10 21:02 , Processed in 0.385384 second(s), 51 queries .

回顶部