% t( V0 R0 y* p4 G0 s8 J0 |
前几天写程序用到几个打印的API函数.把研究成果和大家分享
$ O6 A- {$ Y/ i! j* ~$ ^7 f建议大家结合MSDN看看
1 X. J/ z) y* m _9 |# gPrivate Type PRINTER_INFO_1
! Q( ~' O" S! n2 O# X nFlags As Long
) z$ G: }& V# v+ P3 epDescription As Long
R' M+ N, Q _- d, BpName As Long
pComment As Long
End Type
2 ^+ i0 v9 ^9 q! JPrivate Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
Long, ByVal hPrinter As Long) As Long
2 {# M5 m6 f) m0 S/ [Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
6 p: I3 o0 F; s9 {5 [( cLong) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
+ v! T: I6 @8 v, Q" ?0 IPrivate Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
3 ^6 L4 n9 F$ Q+ GLong, pcbNeeded As Long) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
: L% D( s- k4 I1 aPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
ring As Long) As Long
GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
9 z7 ~) `9 m0 N; }/ X4 i( B9 v- w+ |7 P下面是 例程:得到打印机的类型名
'pDeviceName是打印机名
'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
Private Sub GetPrint(pDeviceName, pType As String)
+ f( b4 ^; Q8 G* Q0 gDim pIn As PRINTER_INFO_1
8 s' e' s" _& d/ B: X; l PDim s As String * 256
9 u, f/ s5 h( Y, S$ r8 h6 qDim r As Long, phPrinter As Long, r1 As Long
) S3 F( U0 d9 V9 ]0 z bOn Error Resume Next
r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
If r = 0 Then Exit Sub
r = GetPrinter(phPrinter, 1, 0, 0, r1)
1 ]- }! C; [2 z- @ReDim pPrinter(r1) As Byte
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
If r = 0 Then Exit Sub
r = ClosePrinter(phPrinter)
, _' O: R+ q7 n: X& P @& tCopyMemory pIn, pPrinter(0), Len(pIn)
* I7 |0 ~; ]6 n; @4 r ( _/ R) o) S/ C" ~/ x; ur1 = lstrlen(pIn.pDescription)
r = lstrcpy(s, pIn.pDescription)
If r = 0 Then Exit Sub
pType = Left(s, r1)
7 n* U4 D. L; X4 Q. ~( pr1 = InStr(1, pType, ",")
' x3 q/ C/ H; s8 [+ o& Lr = InStr(r1 + 1, pType, ",")
' V$ j* G0 a+ Q/ |5 p; rpType = Mid(pType, r1 + 1, r - r1 - 1)
End Sub
% B$ I1 Y* D$ DPrinterProperties函数比较简单.你试试吗?
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |