|
8 b7 e& G! }( U+ R- h- ?; P前几天写程序用到几个打印的API函数.把研究成果和大家分享 ( C7 j9 ], M- i. S
建议大家结合MSDN看看 & K- b3 q4 d$ i4 x
Private Type PRINTER_INFO_1
4 a# w( ^1 B0 R5 f) \3 |& Y Flags As Long 3 J1 r, y9 W/ ]( R6 [3 \7 q p
pDescription As Long
% e$ v0 u* Z2 t. f pName As Long
2 V( {! k# N' p5 M; w( V& ~2 m pComment As Long $ q3 V+ o6 {6 g+ `7 D
End Type 7 ~4 c( ]/ o8 O2 ]( p/ {7 ?
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
7 @! ~% @. u& O. X6 dLong, ByVal hPrinter As Long) As Long , C: |7 D9 Y( |4 R; }: u( [! [! a
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As 1 e6 _! h/ G+ I1 c
Long) As Long
7 v1 f4 d' z! C9 Q5 ~Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" 6 d, `7 r' r" z& H5 Y9 M
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long 1 E3 x* M z5 ]/ u: D
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
' q2 n3 ]% t) T8 k/ j$ F p1 P; ]ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
% ]8 L) N L. Z f9 _- {: L2 mLong, pcbNeeded As Long) As Long 6 u4 J/ a1 G4 T: T! {$ M9 t$ o
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
, f. Y- D1 C/ @- y (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
# H$ p: ?9 C; Z* E' F0 CPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
0 i* s( y7 {" q4 Yring As Long) As Long
( ~8 x; l) l6 N6 i; I9 m H$ B lGetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向 / W/ S5 q6 `/ M* Y; a$ X3 _
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针. 0 e. X3 }% N- N. W
在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
- ^/ E$ H# `- l; w) a; r' o下面是 例程:得到打印机的类型名
% {' Q9 j: {3 b* y5 ]'pDeviceName是打印机名
: y# Q; _( i% b( H+ W'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序 ! R: B. R ~( L2 t: d" I$ l( U5 E9 I
Private Sub GetPrint(pDeviceName, pType As String) s1 p$ R p9 R% X1 X: f& U
Dim pIn As PRINTER_INFO_1
0 H) _) e y0 b- O, h% n# X Dim s As String * 256
: j8 [/ K6 o$ T Dim r As Long, phPrinter As Long, r1 As Long 7 S# P6 ~2 f3 X) U; G6 R/ F2 F/ O
On Error Resume Next
7 F) K# k+ Z1 v6 W8 Z r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
% i' `2 Y9 I- W If r = 0 Then Exit Sub 1 j6 E3 @4 p6 @* A* x' F, p$ Y. m
r = GetPrinter(phPrinter, 1, 0, 0, r1) 0 j+ ^& {. `# ?# t
ReDim pPrinter(r1) As Byte
" i9 [. u* _# i- x) ] r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
& Y, F+ @7 r( O( R: ? If r = 0 Then Exit Sub
# f9 i/ u' A6 q3 u+ { r = ClosePrinter(phPrinter) 7 X. [/ J G$ q5 d/ B# v
CopyMemory pIn, pPrinter(0), Len(pIn) * ~- b7 h+ F8 j G1 i9 X, W
9 T! D" Q( _+ l! ~
r1 = lstrlen(pIn.pDescription)
& |# Y- n) ~0 k; i8 y L& I v r = lstrcpy(s, pIn.pDescription)
5 U, o+ F& J1 q3 j: A* `! B7 o If r = 0 Then Exit Sub % e6 |, P# o3 R: V0 _
pType = Left(s, r1) 5 p1 j% s- ]5 H" b7 J
r1 = InStr(1, pType, ",")
1 x* V! h) ~+ C" O: M* }) w r = InStr(r1 + 1, pType, ",")
. C; R! Q0 F5 k1 e pType = Mid(pType, r1 + 1, r - r1 - 1)
2 F i( O T7 I# n. nEnd Sub 0 Z( {, K4 ^7 |5 O1 r
PrinterProperties函数比较简单.你试试吗? |