QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

) P, \! }6 g7 l1 |, W3 W

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

: B9 T3 A1 q/ j

建议大家结合MSDN看看

" a4 {1 j4 a; j

Private Type PRINTER_INFO_1

' \$ W# a) _! g& U0 M, u

Flags As Long

; B* v# ?/ I* n! h0 L9 h2 h9 ~( e8 k$ W

pDescription As Long

, N* P3 C$ g( g0 C% E

pName As Long

$ U; T& O8 n3 a7 ^! C

pComment As Long

& ]/ V5 |+ h6 `2 z! Z5 N+ A1 o" L

End Type

9 h! q [) S5 E5 e/ v' E7 ^! K) F

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

9 X8 R) k5 S, k' j

Long, ByVal hPrinter As Long) As Long

. x% J/ ~1 e8 C( E o, _

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

4 X5 {/ b7 v) Y

Long) As Long

# l9 q. ~6 K' l8 \$ F+ e

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

$ K7 `" a' d r8 Q. P4 q

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

8 E9 {+ s3 @$ m2 w

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

C$ t O2 `0 Y6 R- G0 C' O$ E

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

: e. i9 U; ?* y3 e. `9 r+ c

Long, pcbNeeded As Long) As Long

' N" K+ x* b* ~: n& m6 X# k

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

$ ~, [4 j4 a- f) f" a/ b% i

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

. _+ V" P1 R! e

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

7 ~4 w$ `; C0 X3 U

ring As Long) As Long

9 Y3 m% c- Z' d0 b4 l# e7 Z( ~

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

9 e' ]6 O6 n+ U0 ~. `' n# f' ^

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

( S( }" f8 g7 \' p1 ?1 o3 S: A

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

0 G7 w6 Y1 J* ]) T# j

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

- F( ?3 F3 M* ?9 _* W" g! P% V

'pDeviceName是打印机名

0 Q" b' J4 J3 J; a8 x

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

" [9 r4 [ I& ?% \3 O4 A% o: U

Private Sub GetPrint(pDeviceName, pType As String)

4 U) X, v2 l& d9 V( p( v9 k

Dim pIn As PRINTER_INFO_1

5 J- L; X4 C+ Z8 Z' c- w# J

Dim s As String * 256

2 J+ H) v" L9 S& l! J" v

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

$ a1 \8 y, ^$ @! c& r9 R2 R- O

On Error Resume Next

' O/ Y; I" ~& D: h

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

8 ^- {4 E7 u# L; `

If r = 0 Then Exit Sub

- l$ I" n8 v+ C) Y7 E

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

9 v: o7 b6 x7 O

ReDim pPrinter(r1) As Byte

/ y- n+ z6 X- ?' b2 P8 z* b

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

$ g/ ]% H; Z: w6 N. U

If r = 0 Then Exit Sub

9 U' z& X4 i- L. V" H

r = ClosePrinter(phPrinter)

0 g0 d$ o8 M& i; J

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

+ M n7 F+ ?1 Q/ p3 \# b# `) A! ] 7 m* f A, x0 P) |' z

r1 = lstrlen(pIn.pDescription)

; [$ I( J, z7 I5 V9 K

r = lstrcpy(s, pIn.pDescription)

1 Q0 b- _; f1 n+ U2 p2 e0 g

If r = 0 Then Exit Sub

( b+ B. y2 O1 X- @4 p

pType = Left(s, r1)

1 o' @: c$ U5 r" v

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

8 p# Q* @- X2 I+ Q# {

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

% R) U5 _' B2 ~7 k: b0 v# ]

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

4 i K% z! O9 f0 y

End Sub

) ?8 V- P/ B( ]; D; W

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, 2026-4-21 14:51 , Processed in 0.306684 second(s), 51 queries .

回顶部