数学建模社区-数学中国

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

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

% t( V0 R0 y* p4 G0 s8 J0 |

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

$ O6 A- {$ Y/ i! j* ~$ ^7 f

建议大家结合MSDN看看

1 X. J/ z) y* m _9 |# g

Private Type PRINTER_INFO_1

! Q( ~' O" S! n2 O# X n

Flags As Long

) z$ G: }& V# v+ P3 e

pDescription As Long

R' M+ N, Q _- d, B

pName As Long

7 K1 f1 J- L3 p$ A: V

pComment As Long

4 P4 G5 [' S5 g

End Type

2 ^+ i0 v9 ^9 q! J

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

/ F4 l( r) r/ i7 ]

Long, ByVal hPrinter As Long) As Long

2 {# M5 m6 f) m0 S/ [

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

6 p: I3 o0 F; s9 {5 [( c

Long) As Long

' ]$ R+ D0 W' ~4 p; ~& _' @, X

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

0 r! }. B) _3 L& [8 M

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

+ v! T: I6 @8 v, Q" ?0 I

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

$ |- g6 ~% r6 Z" Z3 d F

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

3 ^6 L4 n9 F$ Q+ G

Long, pcbNeeded As Long) As Long

4 Z* |! G; |' U" ^% B. O8 I- Q9 n

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

9 F$ N4 y8 U3 p# b3 U a) m* h

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

: L% D( s- k4 I1 a

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

4 A7 B; {$ d Q

ring As Long) As Long

7 t3 m- b; J }" H' c4 i$ w

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

. M. b- U) N h4 J' H) E

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

: i ~) j& p4 a/ u% n6 y4 Z& T

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

9 z7 ~) `9 m0 N; }/ X4 i( B9 v- w+ |7 P

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

: Q. c1 Z& ]* A( Z5 @

'pDeviceName是打印机名

6 B: a! w7 W+ Z$ n: d

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

& S. ~ \3 L7 x7 R- M$ G- A/ E, p

Private Sub GetPrint(pDeviceName, pType As String)

+ f( b4 ^; Q8 G* Q0 g

Dim pIn As PRINTER_INFO_1

8 s' e' s" _& d/ B: X; l P

Dim s As String * 256

9 u, f/ s5 h( Y, S$ r8 h6 q

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

) S3 F( U0 d9 V9 ]0 z b

On Error Resume Next

9 k! F6 B4 s# i" M" V! Q4 X7 V

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

* q" E+ }5 k* z% L- T' D/ C

If r = 0 Then Exit Sub

/ L, y3 `- N: G# }

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

1 ]- }! C; [2 z- @

ReDim pPrinter(r1) As Byte

4 v& O. L" y/ V, Y+ V

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

5 w) K0 q5 J0 k& ^8 {" Z2 D

If r = 0 Then Exit Sub

) w' `- h) X2 C# V( b* K

r = ClosePrinter(phPrinter)

, _' O: R+ q7 n: X& P @& t

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

* I7 |0 ~; ]6 n; @4 r ( _/ R) o) S/ C" ~/ x; u

r1 = lstrlen(pIn.pDescription)

; W( ?! V4 r( B+ A; r

r = lstrcpy(s, pIn.pDescription)

4 V9 i7 X" E- m8 x3 Q0 n! S

If r = 0 Then Exit Sub

4 G0 O* i9 N- b" r% H

pType = Left(s, r1)

7 n* U4 D. L; X4 Q. ~( p

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

' x3 q/ C/ H; s8 [+ o& L

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

' V$ j* G0 a+ Q/ |5 p; r

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

( i1 {1 ?9 _" [# N! y5 l- \

End Sub

% B$ I1 Y* D$ D

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






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