QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3521|回复: 0
打印 上一主题 下一主题

几个打印机的API函数

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

2 r; i- V3 j( i5 g- a/ P) u5 e

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

: M$ ]4 L' Y9 V( Y" ]

建议大家结合MSDN看看

! v% p/ o- m: i2 u' m

Private Type PRINTER_INFO_1

$ V! A* y5 _4 _9 [3 i6 F4 k! ]

Flags As Long

, D+ T. a0 ~7 C

pDescription As Long

* s, X9 @, p7 e W. X4 [

pName As Long

+ i( `. j; t5 e: ]% o3 e: z2 _

pComment As Long

; I( g$ C5 Q B, J* Z

End Type

$ t6 @+ `6 N( y& h7 x

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

; p+ {& z8 b; j% j

Long, ByVal hPrinter As Long) As Long

+ l7 _+ g( \1 r* u

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

* I/ q: F$ j1 a/ a! c

Long) As Long

4 L2 n$ M+ g- ^; h: Q: q j" h

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

' H5 x/ B0 C* m; m# r! j1 H1 M

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

5 }- X7 y1 B! V

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

) b, J( X1 R: w

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

) M3 Z [7 x7 J7 `& ]

Long, pcbNeeded As Long) As Long

, S6 Y. w( B5 ? W

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

3 }& l+ q7 T+ U0 G8 b: z

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

2 c8 N# Q3 A! M1 I; i

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

1 a; @5 G& J9 l. \/ ]" n* A; G

ring As Long) As Long

& I2 J' K$ r. q! h L( x

GetPrinter函数返回的数据即我们想要的数据在参数pPrinter而且是一个地址指针指向

7 i7 [4 ^4 f) Q& [4 @# i0 w$ w

一个PRINTER_INFO_1结构.结构的pDescription 是指向打印机描述字符串的指针.

^6 [) T: K: I. w

在VB只好用CopyMemory,lstrcpy 和 lstrlen得到这个字符串.

0 C+ x" w' L" U

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

! w! G# R# C4 i. l! s; H

'pDeviceName是打印机名

7 R0 g* ~- D$ C; h# `

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

) p6 [6 s/ v3 G. b" q

Private Sub GetPrint(pDeviceName, pType As String)

4 a: Z2 Y* M; m4 p: x

Dim pIn As PRINTER_INFO_1

9 Z6 P4 m% _6 i) e: j

Dim s As String * 256

8 r( _1 X. M( O( L6 B

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

( W3 t. [+ K L; c4 y1 e

On Error Resume Next

4 Z4 C7 x, j) v9 ?

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

9 z, t# d5 V# s$ s3 w( {

If r = 0 Then Exit Sub

( t" i/ c5 Z& Y4 D/ X

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

2 `' M/ R. h0 j9 _& |7 ]) g

ReDim pPrinter(r1) As Byte

6 [1 s" z7 w! O" o+ u8 L

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

/ L( ?2 N% I. `

If r = 0 Then Exit Sub

+ `9 ?0 S) _1 }8 a

r = ClosePrinter(phPrinter)

' K, I) v* ^4 h' L+ _# f

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

; l" M$ D1 B- G, i- b A0 \ 9 g. \9 S! Y1 V2 F# _6 m; P8 I8 b9 v

r1 = lstrlen(pIn.pDescription)

7 [/ l$ O3 o0 e/ p1 v$ A3 k

r = lstrcpy(s, pIn.pDescription)

, [ Y: B8 i) {- u8 R1 \

If r = 0 Then Exit Sub

* @4 B8 P% F# H% @0 q" o9 S

pType = Left(s, r1)

& W% G; `1 u1 t

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

9 s. ?) Q r% G

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

) }: w/ t9 E6 z

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

# E3 _# h( X* m0 }7 q" T

End Sub

& c0 G% j& h4 [7 Y

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-3 14:32 , Processed in 0.400316 second(s), 51 queries .

回顶部