前几天写程序用到几个打印的API函数.把研究成果和大家分享
建议大家结合MSDN看看
Private Type PRINTER_INFO_1
% T# m4 k3 ^: R" U% _; uFlags As Long
pDescription As Long
pName As Long
! b0 D H8 f4 |" U0 R9 J+ IpComment As Long
End Type
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
8 j- |( o3 E: @# q$ H( hLong, ByVal hPrinter As Long) As Long
; ]. k+ R5 [9 h) ?1 s* _. oPrivate Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
* c5 h9 j4 {3 Y: ]9 k4 R; [* fLong) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
/ R3 U5 X# ^% \/ V& m$ QPrivate Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
" U" d+ a' A% b0 s9 C: h+ d& cByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
, b+ T m+ ?. R5 f" w5 f/ u) QLong, pcbNeeded As Long) As Long
- J v7 t: W, G; y' QPrivate Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
6 P7 p k3 H! f0 QPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
* c" U1 v, F% U+ q8 Fring As Long) As Long
GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向
. j; q% c0 |4 l/ |9 x; G一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
p5 b' \1 x* ~9 o5 P9 P在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
下面是 例程:得到打印机的类型名
'pDeviceName是打印机名
0 @* z* M$ {8 E( d! z C2 L- c'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
" N5 c/ H% g1 f2 Y* u9 mPrivate Sub GetPrint(pDeviceName, pType As String)
! {: q' N5 j0 [. L& X! ~( t: mDim pIn As PRINTER_INFO_1
( Y" l3 A/ q, J3 t) qDim s As String * 256
0 l a5 ^+ {% P" K c( ?5 N+ XDim r As Long, phPrinter As Long, r1 As Long
% m, _8 |" S0 u3 i& }5 ^$ MOn Error Resume Next
) d/ \7 F% I# A, H+ Wr = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
If r = 0 Then Exit Sub
r = GetPrinter(phPrinter, 1, 0, 0, r1)
+ M# d+ V5 g5 NReDim pPrinter(r1) As Byte
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
4 g. e+ }3 f+ U4 R4 y* |1 r1 xIf r = 0 Then Exit Sub
9 u U1 n2 J8 ]5 F7 y* @" ir = ClosePrinter(phPrinter)
CopyMemory pIn, pPrinter(0), Len(pIn)
3 _* v0 Z+ \" A 0 q* A$ x7 k! P9 z& E/ [# t5 Ar1 = lstrlen(pIn.pDescription)
r = lstrcpy(s, pIn.pDescription)
6 s- k$ t: J/ M8 |! [If r = 0 Then Exit Sub
pType = Left(s, r1)
0 Z0 d/ ~2 b8 C: ^& Hr1 = InStr(1, pType, ",")
r = InStr(r1 + 1, pType, ",")
pType = Mid(pType, r1 + 1, r - r1 - 1)
End Sub
% z: k, H o# K% h, y3 k6 JPrinterProperties函数比较简单.你试试吗?
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |