前几天写程序用到几个打印的API函数.把研究成果和大家分享
建议大家结合MSDN看看
Private Type PRINTER_INFO_1
; A8 V( ]/ f8 _; m3 G* S' KFlags As Long
, w; i( C8 }5 G+ cpDescription As Long
pName As Long
pComment As Long
End Type
6 z. }/ {7 ~3 d, q' {6 hPrivate Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
) M8 X4 c9 q" ~% o( kLong, ByVal hPrinter As Long) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
6 L0 b5 r! i3 M, k7 P(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
5 V: O# y% J: p2 S/ o& v# ALong, pcbNeeded As Long) As Long
9 q+ W4 E: F" w6 \8 wPrivate Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
) L8 L0 J" C& \" Z(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
5 f0 q4 D4 J- Z* X: tPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
ring As Long) As Long
1 i& `5 e8 d1 p. GGetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向
7 f' A3 Q6 ?+ U; p7 l; ]一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
下面是 例程:得到打印机的类型名
, ?% T- o7 W- H( s) @% V'pDeviceName是打印机名
. F4 n" H; K ['pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
0 D$ _1 w& I7 oPrivate Sub GetPrint(pDeviceName, pType As String)
3 x, C% }2 B( O4 s7 H, NDim pIn As PRINTER_INFO_1
Dim s As String * 256
n% p! S1 ]* X4 Y& \- F) BDim r As Long, phPrinter As Long, r1 As Long
On Error Resume Next
: N1 T2 l0 R, ]7 Zr = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
5 O. `7 S3 o8 y) w& `4 ^% \If r = 0 Then Exit Sub
& f. Z9 f5 s8 K) }( Er = GetPrinter(phPrinter, 1, 0, 0, r1)
2 A& k8 M& T% VReDim pPrinter(r1) As Byte
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
& X! j' M- ?2 I8 w% [) t! d$ GIf r = 0 Then Exit Sub
( W q3 r/ I) R& L" Gr = ClosePrinter(phPrinter)
CopyMemory pIn, pPrinter(0), Len(pIn)
( P9 G, j: a& T5 er1 = lstrlen(pIn.pDescription)
8 E$ n' Z8 O9 C1 a: ]) V& T+ `r = lstrcpy(s, pIn.pDescription)
$ N3 G& T! b5 _9 Z% ~If r = 0 Then Exit Sub
" }7 j% }/ S8 s( W' ], ^pType = Left(s, r1)
r1 = InStr(1, pType, ",")
4 H$ b: W& z+ p H, Or = InStr(r1 + 1, pType, ",")
pType = Mid(pType, r1 + 1, r - r1 - 1)
+ P7 [2 L, R' j. I7 B. i& a/ lEnd Sub
4 a" j% [% W% L3 CPrinterProperties函数比较简单.你试试吗?
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |