QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 y& \' H* ]! B i4 d

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

9 [( @; ?7 w% l6 Z& b

建议大家结合MSDN看看

* Y, t0 t8 [' z: z& g

Private Type PRINTER_INFO_1

0 k6 i1 @$ ^# D, Z& }; m6 ?

Flags As Long

) v3 O. F5 V* b# @, ~/ c

pDescription As Long

~- s3 ?7 `2 `( e1 V

pName As Long

, c) D4 X% C0 j. _

pComment As Long

/ t9 I& U6 q7 A% ~! ~2 ?! B

End Type

& n1 l. B: [; W& T- e+ b- Q

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

6 a' F5 `9 p( {. G/ R# d+ e

Long, ByVal hPrinter As Long) As Long

g7 b# f7 N8 H* k) t

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

9 t7 v* q! r8 g. Z9 \+ V- r; x% ^

Long) As Long

. { A$ y# z: }- V

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

% a# W o* Y# u, }" U( N

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

$ K6 I8 X: u; m( J

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

- c6 b7 w, _) G$ K' |, A

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

. k+ ~. n2 g6 ^7 y) i5 i

Long, pcbNeeded As Long) As Long

6 Y) u4 Q; S9 P4 j; ^4 O

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

" T; m" J% z& d* j( W6 }! Y& ~" \: h

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

$ U: O' b4 @6 r- e

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

: y' O V' }, o" z+ ?

ring As Long) As Long

2 T3 W0 f; x2 `

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

) D9 u% P; l: ]( N( o

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

$ }% g& K- x, O# M1 Q T

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

5 P) ~7 ^6 U; L: M

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

& P, o {4 f0 ]. H7 G3 ^

'pDeviceName是打印机名

* u A* D# m( H8 [% z

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

9 G# s: l( c% E9 d: w

Private Sub GetPrint(pDeviceName, pType As String)

4 c1 |0 Z$ Z! K- } g) c% k8 v* m

Dim pIn As PRINTER_INFO_1

" n5 m8 E; e* g& h$ B0 c1 \3 Y

Dim s As String * 256

2 `4 P! v6 f2 h7 L( i0 K1 ]2 |2 k

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

7 t( p0 z' H; q+ |. A0 |2 V

On Error Resume Next

9 R* {% M/ a- @. E7 z

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

2 I' K, K) ]8 n6 ]3 w9 b, S7 t

If r = 0 Then Exit Sub

1 j. y4 {+ O7 Z3 @9 S

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

$ S6 ~" O2 ^3 V3 {+ c6 e

ReDim pPrinter(r1) As Byte

* f' b6 w) X! ^7 v. z8 V, ?

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

$ b& ~5 E1 m( W( N o5 W

If r = 0 Then Exit Sub

& l0 c U+ k R

r = ClosePrinter(phPrinter)

4 q! a; }+ Y$ q/ |5 B

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

* k! R+ t5 e* ~( j / k9 |! v8 b- f& D$ \

r1 = lstrlen(pIn.pDescription)

1 R# W, T h# g7 Q

r = lstrcpy(s, pIn.pDescription)

6 P1 |) Q2 h- }; X/ ~' W$ _# h

If r = 0 Then Exit Sub

4 c' X8 Z- n& c: v$ M8 s

pType = Left(s, r1)

! G: ]0 X) f7 j$ A; m6 H

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

: k% n) [. B7 m4 x5 w7 G

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

6 a2 e9 I; _7 v3 o4 U

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

: X# A/ s+ P2 I& q& D

End Sub

- O7 Y) _" @- ]! G! `

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-8-17 19:53 , Processed in 0.513848 second(s), 51 queries .

回顶部