|
9 b9 a8 m0 V; ?+ P$ A4 ]. j前几天写程序用到几个打印的API函数.把研究成果和大家分享 ' ]1 W6 ]& L$ _4 }
建议大家结合MSDN看看
) {( f' e) g- m l$ W+ YPrivate Type PRINTER_INFO_1 4 z Z" w' P6 S R. S5 l! W
Flags As Long
w" v# T- Y5 Z \; q& z pDescription As Long ! D) P, a% h4 d6 P. T- R
pName As Long " f" L B8 W9 z! A) v- c" j
pComment As Long
: [2 n9 v9 l* f. O! i* s4 J4 zEnd Type # C! h' K8 S0 u" A$ z+ E
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
$ t( v$ m( n7 L4 `. fLong, ByVal hPrinter As Long) As Long ( i) c6 d: W; n6 z0 \) t5 Y
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
- Z/ H& B/ @; m' f4 v9 ~Long) As Long , G5 B$ ?: }5 k& N7 s
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" ) ]# d$ U) {! N$ I
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long 0 F8 p* H4 q& [4 q A
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" ( - B& ~# |; b1 Y# ~
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As 4 V8 D- |( c& |' v
Long, pcbNeeded As Long) As Long
8 a7 B9 ~8 [: ]+ T# }$ dPrivate Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
& {% V8 U; ^: m3 [: q6 a7 ? (ByVal lpString1 As String, ByVal lpString2 As Long) As Long * i: p! H0 t( P4 d" R7 p: w; {
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
" H T' Q! F+ @) _ring As Long) As Long * a& E7 _* I2 {
GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向
/ l5 N7 M5 p" {7 a9 R9 t5 z一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
1 m% a- I# _4 w5 O+ i. D* a在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串. h6 b6 k" K3 N6 z5 p
下面是 例程:得到打印机的类型名
4 Y4 r) R p* ^+ C5 {; C'pDeviceName是打印机名 * \& x: a7 |; N# K' ]
'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序 3 b; h/ ^( o; s& @1 ~- r
Private Sub GetPrint(pDeviceName, pType As String)
% Q* F" D7 I: Q; u9 m Dim pIn As PRINTER_INFO_1
1 O; e% k$ q& S Dim s As String * 256
^; @8 y" y' X" J+ M% t Dim r As Long, phPrinter As Long, r1 As Long ) R* u0 e& B" a; }* B
On Error Resume Next 7 d- F; s7 F- v$ w4 m2 k
r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&) % p5 i1 Z1 D7 Z5 p" Q0 v" m! o
If r = 0 Then Exit Sub + }, n, i. }0 k- w
r = GetPrinter(phPrinter, 1, 0, 0, r1) ) X$ Q6 W+ X3 k- {* I+ L/ \0 M
ReDim pPrinter(r1) As Byte R0 U; m" e( I1 T9 N) P
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
# m/ x& `; S4 W. x# k1 ` If r = 0 Then Exit Sub
# g% t/ ^' T. X7 z* S r = ClosePrinter(phPrinter)
' e2 j. o% o9 C# N$ v( M+ H CopyMemory pIn, pPrinter(0), Len(pIn)
# [' C$ y/ r4 K+ t c* w7 Q$ D1 ?. Q" @1 F, G) V
r1 = lstrlen(pIn.pDescription)
7 D8 N* y3 r5 D0 X, T r = lstrcpy(s, pIn.pDescription) 2 P9 C$ Z" h# i; F: V1 t" k
If r = 0 Then Exit Sub
2 c7 ]3 M) p- B# L I X pType = Left(s, r1) , G9 M0 q, e+ e3 B7 U7 ?
r1 = InStr(1, pType, ",") 7 ]( d* k& ~" I k0 N
r = InStr(r1 + 1, pType, ",") 7 l2 V h- o+ O
pType = Mid(pType, r1 + 1, r - r1 - 1)
, p* V$ b R3 }/ KEnd Sub
, v. H# N6 a; |6 d- }6 f- VPrinterProperties函数比较简单.你试试吗? |