QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 b7 e& G! }( U+ R- h- ?; P

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

( C7 j9 ], M- i. S

建议大家结合MSDN看看

& K- b3 q4 d$ i4 x

Private Type PRINTER_INFO_1

4 a# w( ^1 B0 R5 f) \3 |& Y

Flags As Long

3 J1 r, y9 W/ ]( R6 [3 \7 q p

pDescription As Long

% e$ v0 u* Z2 t. f

pName As Long

2 V( {! k# N' p5 M; w( V& ~2 m

pComment As Long

$ q3 V+ o6 {6 g+ `7 D

End Type

7 ~4 c( ]/ o8 O2 ]( p/ {7 ?

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

7 @! ~% @. u& O. X6 d

Long, ByVal hPrinter As Long) As Long

, C: |7 D9 Y( |4 R; }: u( [! [! a

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

1 e6 _! h/ G+ I1 c

Long) As Long

7 v1 f4 d' z! C9 Q5 ~

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

6 d, `7 r' r" z& H5 Y9 M

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

1 E3 x* M z5 ]/ u: D

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

' q2 n3 ]% t) T8 k/ j$ F p1 P; ]

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

% ]8 L) N L. Z f9 _- {: L2 m

Long, pcbNeeded As Long) As Long

6 u4 J/ a1 G4 T: T! {$ M9 t$ o

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

, f. Y- D1 C/ @- y

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

# H$ p: ?9 C; Z* E' F0 C

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

0 i* s( y7 {" q4 Y

ring As Long) As Long

( ~8 x; l) l6 N6 i; I9 m H$ B l

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

/ W/ S5 q6 `/ M* Y; a$ X3 _

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

0 e. X3 }% N- N. W

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

- ^/ E$ H# `- l; w) a; r' o

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

% {' Q9 j: {3 b* y5 ]

'pDeviceName是打印机名

: y# Q; _( i% b( H+ W

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

! R: B. R ~( L2 t: d" I$ l( U5 E9 I

Private Sub GetPrint(pDeviceName, pType As String)

s1 p$ R p9 R% X1 X: f& U

Dim pIn As PRINTER_INFO_1

0 H) _) e y0 b- O, h% n# X

Dim s As String * 256

: j8 [/ K6 o$ T

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

7 S# P6 ~2 f3 X) U; G6 R/ F2 F/ O

On Error Resume Next

7 F) K# k+ Z1 v6 W8 Z

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

% i' `2 Y9 I- W

If r = 0 Then Exit Sub

1 j6 E3 @4 p6 @* A* x' F, p$ Y. m

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

0 j+ ^& {. `# ?# t

ReDim pPrinter(r1) As Byte

" i9 [. u* _# i- x) ]

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

& Y, F+ @7 r( O( R: ?

If r = 0 Then Exit Sub

# f9 i/ u' A6 q3 u+ {

r = ClosePrinter(phPrinter)

7 X. [/ J G$ q5 d/ B# v

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

* ~- b7 h+ F8 j G1 i9 X, W 9 T! D" Q( _+ l! ~

r1 = lstrlen(pIn.pDescription)

& |# Y- n) ~0 k; i8 y L& I v

r = lstrcpy(s, pIn.pDescription)

5 U, o+ F& J1 q3 j: A* `! B7 o

If r = 0 Then Exit Sub

% e6 |, P# o3 R: V0 _

pType = Left(s, r1)

5 p1 j% s- ]5 H" b7 J

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

1 x* V! h) ~+ C" O: M* }) w

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

. C; R! Q0 F5 k1 e

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

2 F i( O T7 I# n. n

End Sub

0 Z( {, K4 ^7 |5 O1 r

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 18:10 , Processed in 0.317666 second(s), 52 queries .

回顶部