数学建模社区-数学中国

标题: 几个打印机的API函数 [打印本页]

作者: 韩冰    时间: 2005-1-26 01:27
标题: 几个打印机的API函数

8 I' H% J5 o, }2 b

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

) O3 X/ G8 b. g* E" X, d' R1 W

建议大家结合MSDN看看

0 w- W0 t; z% k

Private Type PRINTER_INFO_1

; A8 V( ]/ f8 _; m3 G* S' K

Flags As Long

, w; i( C8 }5 G+ c

pDescription As Long

" [) }$ _; `. g7 S Y7 {0 B

pName As Long

/ d( K. B g$ L& T

pComment As Long

; e& E! ~/ ?, {

End Type

6 z. }/ {7 ~3 d, q' {6 h

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

) M8 X4 c9 q" ~% o( k

Long, ByVal hPrinter As Long) As Long

6 u. y/ ?0 K# ]$ s7 Z6 S- h

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

3 L9 c: j: [( k4 l. [4 \& ~

Long) As Long

7 Y1 ]. l: F& R8 p$ G7 ?

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

6 L0 b5 r! i3 M, k7 P

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

- L! g; z- j! R. `

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

' ?, N d. H5 L9 y1 G0 l) K8 ?

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

5 V: O# y% J: p2 S/ o& v# A

Long, pcbNeeded As Long) As Long

9 q+ W4 E: F" w6 \8 w

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

) L8 L0 J" C& \" Z

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

5 f0 q4 D4 J- Z* X: t

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

G) B3 I$ B. d: L- d! ]8 _3 V" N

ring As Long) As Long

1 i& `5 e8 d1 p. G

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

7 f' A3 Q6 ?+ U; p7 l; ]

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

" A4 d( H6 A! n0 t

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

2 |0 R; B! G9 C5 I

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

, ?% T- o7 W- H( s) @% V

'pDeviceName是打印机名

. F4 n" H; K [

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

0 D$ _1 w& I7 o

Private Sub GetPrint(pDeviceName, pType As String)

3 x, C% }2 B( O4 s7 H, N

Dim pIn As PRINTER_INFO_1

) A; F& g& k6 }) y, x% w% v8 t. n

Dim s As String * 256

n% p! S1 ]* X4 Y& \- F) B

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

8 c3 [. _. Z% w& l, K0 r3 X

On Error Resume Next

: N1 T2 l0 R, ]7 Z

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

5 O. `7 S3 o8 y) w& `4 ^% \

If r = 0 Then Exit Sub

& f. Z9 f5 s8 K) }( E

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

2 A& k8 M& T% V

ReDim pPrinter(r1) As Byte

+ L i/ I. R+ V* K

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

& X! j' M- ?2 I8 w% [) t! d$ G

If r = 0 Then Exit Sub

( W q3 r/ I) R& L" G

r = ClosePrinter(phPrinter)

* g F- u7 U$ o

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

( m4 {' L8 M5 h# d9 n( P9 G, j: a& T5 e

r1 = lstrlen(pIn.pDescription)

8 E$ n' Z8 O9 C1 a: ]) V& T+ `

r = lstrcpy(s, pIn.pDescription)

$ N3 G& T! b5 _9 Z% ~

If r = 0 Then Exit Sub

" }7 j% }/ S8 s( W' ], ^

pType = Left(s, r1)

* u i0 o* e3 {, G

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

4 H$ b: W& z+ p H, O

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

6 ?" z4 p- k3 G6 ]' C

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

+ P7 [2 L, R' j. I7 B. i& a/ l

End Sub

4 a" j% [% W% L3 C

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






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5