|
0 O! s9 e S2 r前几天写程序用到几个打印的API函数.把研究成果和大家分享 2 s' W. E, f# ]" O8 j: y3 }
建议大家结合MSDN看看
0 D# H% G- j' _Private Type PRINTER_INFO_1
( \2 p, @; |! i' J- k Flags As Long
+ F, r0 N( u" }8 D/ r pDescription As Long
/ D- u3 W. x( g pName As Long + Z- o, e2 _7 @# y6 ?. M6 h' K B& N
pComment As Long
c" G! J' t9 q6 UEnd Type ( Z, T, f- ^ M9 b( z
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
# A# T' b1 x% T$ KLong, ByVal hPrinter As Long) As Long
5 ~$ g5 \4 f9 H8 t6 O: n" ~Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As 6 W* e8 R0 v, r3 ]+ p% ] C
Long) As Long
0 \% i& r% U0 S3 R9 v- K e! ?Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
1 `3 K" w1 @6 N(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
) S4 q \ j+ g* f3 ^Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" ( % o6 T# e& h" c3 y- A+ }
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
% e6 j. D# q F5 o4 CLong, pcbNeeded As Long) As Long $ t8 F. N/ P2 c* a6 O7 E
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _ : g6 ~7 J$ Z; K5 I/ n
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
/ S* F0 O$ ~" M `Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt ' j9 v; I4 S( `; J
ring As Long) As Long
1 @" x6 j) v+ ] U$ l7 S8 vGetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向 9 t- h# H- V0 a. I- S: `
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针. + }( O$ c- o J2 ]7 C& E% d4 F5 T
在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串. ( m4 L9 B2 q2 A: H
下面是 例程:得到打印机的类型名
. _5 p+ j9 Z' e; i* \+ X- w: P'pDeviceName是打印机名
' O" |4 N% {( r& H( J'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
% U3 k |: H, `% l9 g9 jPrivate Sub GetPrint(pDeviceName, pType As String) / Y! y7 Z& ~$ x* y
Dim pIn As PRINTER_INFO_1 0 R% t+ a( I9 T% C, C
Dim s As String * 256
5 Y# l* F, e( D$ b! e# ~+ }0 { Dim r As Long, phPrinter As Long, r1 As Long + i; E; \" Z, b; r& c5 x
On Error Resume Next & E0 J6 y2 \# M! L
r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&) 5 N5 A1 x ^, q
If r = 0 Then Exit Sub
3 f7 Q O0 l/ r5 Z r = GetPrinter(phPrinter, 1, 0, 0, r1) 9 l( V& B5 G( o+ B( _/ t
ReDim pPrinter(r1) As Byte 1 j7 S+ Z* f% r8 Y5 v
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
# J( H3 ?0 y5 S& \6 M" F+ e5 B If r = 0 Then Exit Sub * v5 p" q! n m+ X, l
r = ClosePrinter(phPrinter)
: y/ O+ Z7 m ?3 H% [6 g8 Y CopyMemory pIn, pPrinter(0), Len(pIn) 3 m3 u: s- o- i! l
* K) Y9 F0 h" x% [7 d. f
r1 = lstrlen(pIn.pDescription)
; W2 e. } ~- O6 E r = lstrcpy(s, pIn.pDescription) 1 O# b z* O. q. d: o6 d$ ] @
If r = 0 Then Exit Sub
4 R; A; T6 F( ]! i1 M pType = Left(s, r1) - M- e/ d5 q) C& p" V
r1 = InStr(1, pType, ",") 5 c- g$ h2 s3 B) H" g
r = InStr(r1 + 1, pType, ",")
2 }7 ~% C6 c* [* n pType = Mid(pType, r1 + 1, r - r1 - 1) 4 A! z, U( r. E" e$ O2 ^$ V D% k
End Sub
+ |2 J8 l5 x9 H9 e& ?PrinterProperties函数比较简单.你试试吗? |