数学建模社区-数学中国

标题: 几个打印机的API函数 [打印本页]

作者: 韩冰    时间: 2005-1-26 01:27
标题: 几个打印机的API函数

* k( H D, t8 ?. e4 i2 t# _" r

前几天写程序用到几个打印的API函数.把研究成果和大家分享

& C, n- F- J) H4 i0 Y; O0 r

建议大家结合MSDN看看

" F+ |8 U/ c) U2 D! n1 Q+ W

Private Type PRINTER_INFO_1

% T# m4 k3 ^: R" U% _; u

Flags As Long

- B3 K. ]6 G$ |! u: _6 p9 Y

pDescription As Long

; C' w. {2 V, Y5 J# ~

pName As Long

! b0 D H8 f4 |" U0 R9 J+ I

pComment As Long

: H& j! `$ d/ \! N* \

End Type

( h0 k/ m- g9 m6 _8 a

Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hWnd As

8 j- |( o3 E: @# q$ H( h

Long, ByVal hPrinter As Long) As Long

; ]. k+ R5 [9 h) ?1 s* _. o

Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As

* c5 h9 j4 {3 Y: ]9 k4 R; [* f

Long) As Long

1 k6 I4 [5 S6 G! C" {: h+ N

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"

, k; K( s$ E7 t' O z4 ?4 [

(ByVal pPrinterName As String, phPrinter As Long, pDefault As Long) As Long

/ R3 U5 X# ^% \/ V& m$ Q

Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (

" U" d+ a' A% b0 s9 C: h+ d& c

ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As

, b+ T m+ ?. R5 f" w5 f/ u) Q

Long, pcbNeeded As Long) As Long

- J v7 t: W, G; y' Q

Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _

/ J& c5 n$ }+ r1 J( R2 m

(ByVal lpString1 As String, ByVal lpString2 As Long) As Long

6 P7 p k3 H! f0 Q

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpSt

* c" U1 v, F% U+ q8 F

ring As Long) As Long

$ g: ~. U2 v2 M8 k$ J2 f

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得到这个字符串.

! N% Z5 e0 K& u+ L3 z0 }

下面是 例程:得到打印机的类型名

% k0 N; @+ i& `% r6 |4 A: C

'pDeviceName是打印机名

0 @* z* M$ {8 E( d! z C2 L- c

'pType 是返回的打印机 Description中的打印机类型.这个串里还有打印机名和驱动程序

" N5 c/ H% g1 f2 Y* u9 m

Private Sub GetPrint(pDeviceName, pType As String)

! {: q' N5 j0 [. L& X! ~( t: m

Dim pIn As PRINTER_INFO_1

( Y" l3 A/ q, J3 t) q

Dim s As String * 256

0 l a5 ^+ {% P" K c( ?5 N+ X

Dim r As Long, phPrinter As Long, r1 As Long

% m, _8 |" S0 u3 i& }5 ^$ M

On Error Resume Next

) d/ \7 F% I# A, H+ W

r = OpenPrinter(pDeviceName & Chr(0), phPrinter, 0&)

2 ^- X ~, d: A; r( G

If r = 0 Then Exit Sub

$ D: ?/ u( e1 y( n8 J9 Q

r = GetPrinter(phPrinter, 1, 0, 0, r1)

+ M# d+ V5 g5 N

ReDim pPrinter(r1) As Byte

3 s+ b2 M+ y. a4 j& m# g: l- ?

r = GetPrinter(phPrinter, 1, pPrinter(0), r1, r1)

4 g. e+ }3 f+ U4 R4 y* |1 r1 x

If r = 0 Then Exit Sub

9 u U1 n2 J8 ]5 F7 y* @" i

r = ClosePrinter(phPrinter)

1 V6 K3 _2 L! c, i! N

CopyMemory pIn, pPrinter(0), Len(pIn)

3 _* v0 Z+ \" A 0 q* A$ x7 k! P9 z& E/ [# t5 A

r1 = lstrlen(pIn.pDescription)

# f [. ]( p9 Z

r = lstrcpy(s, pIn.pDescription)

6 s- k$ t: J/ M8 |! [

If r = 0 Then Exit Sub

3 I9 j/ D/ h, E+ h7 X4 t! D3 `& c

pType = Left(s, r1)

0 Z0 d/ ~2 b8 C: ^& H

r1 = InStr(1, pType, ",")

" q( ^" P0 h1 B( V

r = InStr(r1 + 1, pType, ",")

5 @+ B6 E. ~0 } d3 H

pType = Mid(pType, r1 + 1, r - r1 - 1)

0 F7 K& x8 G+ G( g" F0 h" |4 |

End Sub

% z: k, H o# K% h, y3 k6 J

PrinterProperties函数比较简单.你试试吗?






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5