|
& T6 P6 P: K, W! O! X+ I' b
前几天写程序用到几个打印的API函数.把研究成果和大家分享
3 P; m! m. `% i f5 S" M建议大家结合MSDN看看 0 \$ O2 @! y: ^$ L8 X* Y
Private Type PRINTER_INFO_1 4 Z Y9 q+ b' m
Flags As Long $ v, h9 `# X, V' H6 g' ~2 g
pDescription As Long
5 n1 s, c: V9 S) o' }' ~ pName As Long
8 C6 m) q6 J; O8 i pComment As Long
5 c" J" M" M% r3 f. ]- U: i1 VEnd Type
/ g8 n" j& v* }) [Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As " r8 L( W- |! _
Long, ByVal hPrinter As Long) As Long 6 q" A+ ]4 C, e5 S% g+ R2 O) r9 B
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As 0 V: ?- K) i8 E+ s5 L' m. l8 D
Long) As Long 1 }: `/ P a2 g0 {9 C [
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" S& a$ z6 }0 s% }) F2 m
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long 6 p! z& J% a* k k& M
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
5 J' u6 J; ]& f: K; V$ nByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As 0 b8 b& l$ K4 V4 v9 z
Long, pcbNeeded As Long) As Long
2 D0 t9 B3 b7 v0 R1 _Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _ 7 s5 @" A- A' b" x# f3 W
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long 0 f9 y8 M Y+ G4 F
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
9 a9 ? C( g9 }3 @( ^0 Kring As Long) As Long - a# @; j0 I2 D6 A
GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向 ( ^' z8 {" u7 h2 f; {4 O
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
B& D- Y/ r; o0 D) M$ N, x在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
/ S; w& V- ?' Q, _下面是 例程:得到打印机的类型名 . J- a% K& \% N9 o
'pDeviceName是打印机名
% f; j& _! P4 I' S+ X k'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
( s8 C: A/ a+ C9 J& j/ m# Y/ X" OPrivate Sub GetPrint(pDeviceName, pType As String) , u$ c' q8 \. t7 C: E
Dim pIn As PRINTER_INFO_1
( n/ T. h5 Q; O Dim s As String * 256
5 j* c Q; O1 z/ x! x Dim r As Long, phPrinter As Long, r1 As Long 4 W' j& ~; q! d# V- B
On Error Resume Next
0 X2 V' K& t3 k r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&) ! L7 n$ o( y, {8 ?/ D, Y
If r = 0 Then Exit Sub
# i6 s1 } Y+ ~) B r = GetPrinter(phPrinter, 1, 0, 0, r1)
( b8 I7 \# z6 w) a- B5 L ReDim pPrinter(r1) As Byte
6 o* J0 i" Y' v ? r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
. T. h5 `) ~2 s- x6 I; D( N6 j If r = 0 Then Exit Sub ( [( l8 c* S T7 z4 T! [
r = ClosePrinter(phPrinter) % Y/ H6 I# O6 M$ a8 c4 J4 g) x
CopyMemory pIn, pPrinter(0), Len(pIn)
5 |, {2 D3 x0 S+ N( K6 U2 f, s& @. Q
r1 = lstrlen(pIn.pDescription)
, K( C4 A" ?7 _3 D8 { ?0 G r = lstrcpy(s, pIn.pDescription) 9 s, l/ {1 l5 O1 F+ B3 Q4 H
If r = 0 Then Exit Sub ' t" _* F) u' k# Q1 I2 W b. H4 I
pType = Left(s, r1) R: B* K- F) Y! A
r1 = InStr(1, pType, ",") ' G( ]. C/ r" h# Y. D
r = InStr(r1 + 1, pType, ",")
3 U3 t" }+ y" p6 O8 p: z pType = Mid(pType, r1 + 1, r - r1 - 1)
$ f' U. Q: x8 q: l( l! c* mEnd Sub
) D; I) k/ Z8 V9 c6 aPrinterProperties函数比较简单.你试试吗? |