|
- P9 D) r+ x0 ]6 P4 g5 |3 ?+ O: T$ [前几天写程序用到几个打印的API函数.把研究成果和大家分享 4 ?6 {4 b% T8 M& ~; E) D" c
建议大家结合MSDN看看
, {2 @8 m1 U. ]" R: i' B3 E" e: {, uPrivate Type PRINTER_INFO_1 ! K' x3 b% S# u) t6 h
Flags As Long $ b/ ]2 j& v' W- N. j6 X% v
pDescription As Long
; h1 M, r0 T: _6 S pName As Long . P. s/ I# |$ N- F& U
pComment As Long
2 _/ w, _* |; p$ d/ @( J& ~End Type ( v' [% b/ m6 R+ Y& Z
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
. N2 S" }: f: I% BLong, ByVal hPrinter As Long) As Long
( E0 a1 N, M5 B ?2 HPrivate Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
) V8 R3 L* x! M# b) P s. T LLong) As Long 5 G8 r8 m e" B; }% E1 v* G
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" / R2 } I& w, [
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
% B) I2 R: c- K7 Y* C+ oPrivate Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
Q/ C' t7 P5 u LByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As $ D- H5 b1 [/ P p! |
Long, pcbNeeded As Long) As Long
, c* E2 k8 ^- XPrivate Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
9 T4 q' u8 h2 E/ ^$ n4 J+ d4 x' r6 U (ByVal lpString1 As String, ByVal lpString2 As Long) As Long # T7 p5 i+ d3 T: ?; t& V. O7 A. k
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt ' _2 c- W3 |* R9 i$ b, B/ d. v
ring As Long) As Long
6 i( n; D2 O: t; O. w. vGetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向 ( w) @( k$ n+ Z- D! J
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
& y. s8 c4 p, M' ^在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串. & J+ l0 |$ Y& C9 a' ?$ X
下面是 例程:得到打印机的类型名 ! V7 S0 \' |7 h' ^' X& z# p2 ]" v
'pDeviceName是打印机名
( x+ O% o9 m% ^( x e& A3 H/ s'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
' J4 z' |7 w, o/ S, Y6 U! T" [* O1 cPrivate Sub GetPrint(pDeviceName, pType As String) ' [+ \' T6 Q) r$ d5 y
Dim pIn As PRINTER_INFO_1 ! I$ ^' D" R1 @2 W
Dim s As String * 256 & }0 @$ s0 ?6 O$ h
Dim r As Long, phPrinter As Long, r1 As Long
& h0 r) I/ _, q8 x2 V5 V+ P: Y, l On Error Resume Next 3 ?; j2 A" _! `; p
r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
* O3 A- ~ C2 C6 P; X If r = 0 Then Exit Sub # t h' e* ]+ F) C6 D1 X) h$ ~( ]
r = GetPrinter(phPrinter, 1, 0, 0, r1)
% P7 m. f- G- E' u4 w0 t ReDim pPrinter(r1) As Byte 8 p" Y$ j; I7 B- x
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
3 `, q$ o" [) {4 U G If r = 0 Then Exit Sub 0 W( {3 Z( o& `# m! F
r = ClosePrinter(phPrinter) 9 t* j8 c5 d. U* A& n8 l. z: j
CopyMemory pIn, pPrinter(0), Len(pIn)
/ r1 z E5 C, k X* T) u
2 t V. o3 `3 x1 e: k U* b& K; L r1 = lstrlen(pIn.pDescription) & i4 A. ~: F3 i9 P+ i
r = lstrcpy(s, pIn.pDescription) ; E4 g% `( m" s& V: e* @
If r = 0 Then Exit Sub
% t( i# ?& W+ \9 }% s4 M2 s pType = Left(s, r1) 4 t9 g4 ^( l" A' H
r1 = InStr(1, pType, ",")
2 d" a1 B: \- N# S# ?/ H r = InStr(r1 + 1, pType, ",")
5 _% A9 O3 d/ @ pType = Mid(pType, r1 + 1, r - r1 - 1)
: Y: ?5 I9 f8 ` l% k' ~End Sub
7 C) p: A3 {8 Z1 DPrinterProperties函数比较简单.你试试吗? |