前几天写程序用到几个打印的API函数.把研究成果和大家分享
6 J& R( s+ L4 D2 `" j: V6 h建议大家结合MSDN看看
Private Type PRINTER_INFO_1
8 m2 }1 H/ j# E9 ~5 GFlags As Long
pDescription As Long
7 k9 [$ x( V; hpName As Long
pComment As Long
End Type
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As
3 V4 C! Y4 |: _6 [& T( _Long, 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"
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long
" D+ P" G+ I; z: X: VPrivate Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (
ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As
Long, pcbNeeded As Long) As Long
1 T& u0 ]- V( b7 R. IPrivate Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt
1 M! ?; _7 [7 O8 C# \ring As Long) As Long
GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向
一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.
在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.
下面是 例程:得到打印机的类型名
'pDeviceName是打印机名
'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序
( \# A: n* ~6 J# Z' pPrivate Sub GetPrint(pDeviceName, pType As String)
5 ~, a$ @. L& d: hDim pIn As PRINTER_INFO_1
- Y2 S: V1 F* u0 x( T& h4 n3 WDim s As String * 256
. ?- V+ D/ y. {+ kDim r As Long, phPrinter As Long, r1 As Long
On Error Resume Next
: \) e1 _ \6 S* Z% v: Tr = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)
4 L* |1 Z5 |% O8 o5 q. P2 L5 AIf r = 0 Then Exit Sub
r = GetPrinter(phPrinter, 1, 0, 0, r1)
ReDim pPrinter(r1) As Byte
r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)
If r = 0 Then Exit Sub
r = ClosePrinter(phPrinter)
CopyMemory pIn, pPrinter(0), Len(pIn)
$ B, k0 x) d% Qr1 = lstrlen(pIn.pDescription)
r = lstrcpy(s, pIn.pDescription)
4 b/ I( }5 j8 R& k' U9 n- [If r = 0 Then Exit Sub
pType = Left(s, r1)
r1 = InStr(1, pType, ",")
r = InStr(r1 + 1, pType, ",")
pType = Mid(pType, r1 + 1, r - r1 - 1)
End Sub
0 }' C# `) Q' w3 u2 ^- ?PrinterProperties函数比较简单.你试试吗?
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |