|
: q# ~, R9 B/ J; L前几天写程序用到几个打印的API函数.把研究成果和大家分享 ) R, [2 I( O- d4 _) {
建议大家结合MSDN看看
5 t0 L( _# h0 WPrivate Type PRINTER_INFO_1
9 i! s1 b9 H$ Z Flags As Long * K. F& n2 U% y4 n! H
pDescription As Long
/ a! s' ] A9 W* q1 V2 w9 Z pName As Long & Y4 R) ?" ]5 _5 G1 I4 F
pComment As Long
( g" N2 ?$ F4 f6 `9 rEnd Type
2 ~$ y6 B# r' l! t( SPrivate Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As 6 j; Z5 `9 i/ m9 T# _
Long, ByVal hPrinter As Long) As Long
2 d: o& A7 B' `& OPrivate Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
/ ~' L6 p8 Y, s( O" F5 WLong) As Long # I2 I5 Z6 O+ o- g0 u
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" 5 n& j$ f- M. I3 X$ K
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long 7 _# ?* M0 ~, N+ E5 S2 ^
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" ( 7 {+ a: O4 f& v) W
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
8 f' g, l& C5 j3 E3 V! ?3 u' qLong, pcbNeeded As Long) As Long & {( k& m6 S( p: _- k+ T8 Q
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _ * q+ _7 f9 ]6 J5 I
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
5 k7 x7 k- f& o- f& sPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
8 ?! {8 b% f" f; f: B( I" Rring As Long) As Long
8 S+ r* i% C& g1 M/ s0 N/ FGetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向 ' r/ D1 m! v, S# K9 k2 p- [, l: e
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
% t8 `2 f" p, W( I# D, e在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串. 2 x( R! Q$ M7 s8 _- z) a. n
下面是 例程:得到打印机的类型名 % u! e9 ]2 ?1 W" w. ]# i$ I4 S& ?
'pDeviceName是打印机名
8 e' K; g3 @6 Z9 P2 {'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序 : h: q0 G. \! P+ x
Private Sub GetPrint(pDeviceName, pType As String) 3 I4 {9 e* S$ Q2 Y7 i
Dim pIn As PRINTER_INFO_1 ! \4 M2 A& U' L5 U3 Q1 p( C% W
Dim s As String * 256
; |3 k* r4 B2 j3 Q Dim r As Long, phPrinter As Long, r1 As Long 0 @3 a4 g2 L9 r+ t1 b
On Error Resume Next 9 b5 l( f3 E3 | B- h, Y$ m U
r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
9 h- e+ K& H8 E7 i7 F& Z3 w, T: ~ If r = 0 Then Exit Sub 3 L& [0 c4 }5 z0 O, M
r = GetPrinter(phPrinter, 1, 0, 0, r1) ( A! {" x$ |, A2 C6 I
ReDim pPrinter(r1) As Byte " c5 o6 J) d% K- E1 O4 Z% ~' l
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
# E! z" U; L8 [! ^+ K" Z If r = 0 Then Exit Sub ( J! d: ]- w1 y8 e
r = ClosePrinter(phPrinter) + M2 I# r4 d E( ]
CopyMemory pIn, pPrinter(0), Len(pIn)
. m9 t0 p+ o/ V2 Y: [; V9 O3 l8 U; t' V
r1 = lstrlen(pIn.pDescription)
: u* y: N/ ?# S r = lstrcpy(s, pIn.pDescription)
8 P5 D. O @. E If r = 0 Then Exit Sub ) M) P7 s: l0 T. T
pType = Left(s, r1) " l( x: `: ~0 I
r1 = InStr(1, pType, ",")
: P5 B* D6 @& B/ v) {0 N1 b, L r = InStr(r1 + 1, pType, ",")
& N9 |/ o6 X; Y0 s2 p# i6 f, w pType = Mid(pType, r1 + 1, r - r1 - 1)
* } I3 Q% A) sEnd Sub 7 }+ s+ J' S% M+ r: v
PrinterProperties函数比较简单.你试试吗? |