|
, 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 wPrivate 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 eLong) As Long
/ c; x1 J& K% c2 ]/ m4 k' WPrivate 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: sPrivate Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
% f$ \ M" a0 q1 |) wByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
& U6 h& Y. |, h; C PLong, 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 pGetPrinter函数返回的数据即我们想要的数据在参数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 SPrivate 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 xPrinterProperties函数比较简单.你试试吗? |