数学建模社区-数学中国

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

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

" l U9 G& z+ i

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

6 J& R( s+ L4 D2 `" j: V6 h

建议大家结合MSDN看看

' J; I6 P+ ]) H

Private Type PRINTER_INFO_1

8 m2 }1 H/ j# E9 ~5 G

Flags As Long

. ?$ i; b! W* Q& c" o& m9 W

pDescription As Long

7 k9 [$ x( V; h

pName As Long

) }8 c$ S6 d! i5 }! n

pComment As Long

- ^# E/ [, X7 q/ B8 q, k

End Type

- }/ L1 S. G+ _7 g* B( e

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

3 V4 C! Y4 |: _6 [& T( _

Long, ByVal hPrinter As Long) As Long

: A: l: {. d1 H- N- {' e' ^

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

* J5 T) z i1 y6 w7 K- @2 \

Long) As Long

! g6 n# F; h; j+ \7 y

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

( J- z) O4 k3 |. F/ A2 F

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

" D+ P" G+ I; z: X: V

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

( L1 s* R1 B, O/ b X: A2 x H: O

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

* z. T1 z! G$ y8 x( o

Long, pcbNeeded As Long) As Long

1 T& u0 ]- V( b7 R. I

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

' Q$ \5 o2 n+ e5 ]' R) F

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

; x; P7 ]2 D5 ]3 r, @

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

1 M! ?; _7 [7 O8 C# \

ring As Long) As Long

1 Z5 h, B+ y) ~& b

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

* E# P0 Q, q8 l# Y# Z2 b

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

9 [9 g# T+ C+ A

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

, G" L* A0 \: V4 K8 z- d

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

b! o! `- j* A q4 J3 v- i

'pDeviceName是打印机名

: [. c2 I) }3 D; i4 g) K

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

( \# A: n* ~6 J# Z' p

Private Sub GetPrint(pDeviceName, pType As String)

5 ~, a$ @. L& d: h

Dim pIn As PRINTER_INFO_1

- Y2 S: V1 F* u0 x( T& h4 n3 W

Dim s As String * 256

. ?- V+ D/ y. {+ k

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

6 L9 c( D! u$ f, d9 H, u$ I1 ^6 T

On Error Resume Next

: \) e1 _ \6 S* Z% v: T

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

4 L* |1 Z5 |% O8 o5 q. P2 L5 A

If r = 0 Then Exit Sub

9 {: H3 I1 x* `9 `: ?' I$ F

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

7 w0 \; D6 q2 J6 B! n: _+ x- }

ReDim pPrinter(r1) As Byte

! ^# ]6 A! T l) }

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

{% o: E2 Z2 ?# b0 t4 }

If r = 0 Then Exit Sub

4 I4 Z. f5 p! F8 v* Y

r = ClosePrinter(phPrinter)

5 d7 T/ k$ m, ]3 U

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

; t6 s2 y, g, ~: @$ u$ B, k0 x) d% Q

r1 = lstrlen(pIn.pDescription)

: E0 |5 G1 L# C9 x$ z

r = lstrcpy(s, pIn.pDescription)

4 b/ I( }5 j8 R& k' U9 n- [

If r = 0 Then Exit Sub

! C( S s( S3 U9 w

pType = Left(s, r1)

$ e" W; q J4 W) s' ^7 e, E1 k

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

5 Q1 y# T1 O' y3 n7 ^" s

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

3 Y9 G' H0 K X. J; k& P, n

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

# U0 k4 a8 C Z" S( E

End Sub

0 }' C# `) Q' w3 u2 ^- ?

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






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