QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

% O @' s2 s" q* B0 g% r# H5 L

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

( M; r" ^1 Z2 V6 m6 p- H

建议大家结合MSDN看看

1 k6 t: I$ i' q$ i8 B! S

Private Type PRINTER_INFO_1

# G) h: e( i7 F- e

Flags As Long

! g- Z4 I# z6 O

pDescription As Long

; L0 k8 c* q( p

pName As Long

+ s; A& A! D J& y& ~% F0 k4 |

pComment As Long

0 \0 o# T+ i% {4 K1 m6 k& ^

End Type

: v5 P, J4 T2 I1 d8 H0 w# E

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

0 t1 s% e# L& }6 G( m

Long, ByVal hPrinter As Long) As Long

9 x& T. J7 B, j% w2 n1 P. O% Z

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

4 U7 C/ ~# W, @0 {( N5 i

Long) As Long

0 H$ \8 {+ @/ @* k, j+ a

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

2 a( Y; I% V, Q3 o" |

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

: B6 z$ ]* Q6 O, k4 `

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

1 V' R3 ^- _% E) g: \9 b; k

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

" `% N4 z% I5 P

Long, pcbNeeded As Long) As Long

2 e% G0 j6 t8 d5 e% G% s

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

' r1 x5 m% ?( _! u0 D* h

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

9 b- y# N* t" _ ]7 {% q

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

. n( j j0 p8 c+ q, x

ring As Long) As Long

( f3 l2 m7 i. o0 [! Y: j( S

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

( T$ b1 Z- D; K4 ~; \, Q3 g

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

% P0 n P' S0 ~& L1 J

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

, O6 w# Q/ ?, o' A4 R

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

; f$ u& ~1 B6 v6 |+ u% l' D

'pDeviceName是打印机名

( @! v: s# J3 g+ W2 F5 {6 z3 A

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

4 e0 f& {* K1 x4 y

Private Sub GetPrint(pDeviceName, pType As String)

3 s, j' s5 C( A& [

Dim pIn As PRINTER_INFO_1

8 F/ G" F2 q+ P9 L4 h* ]

Dim s As String * 256

8 @& {" t1 w7 Z! i- }* M# d

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

; f, |( y3 C5 g% L# n' |( z

On Error Resume Next

: e' h1 S O- F

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

/ [* O; D3 X+ g; `" j; f* r1 E0 k2 W

If r = 0 Then Exit Sub

- k3 n* ]7 y9 u' Q& J Q8 u- H

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

3 L f: j5 A" ~5 }

ReDim pPrinter(r1) As Byte

0 }" R b" `" z6 E

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

( _8 t& `( s1 a, L( |

If r = 0 Then Exit Sub

' j! M; o2 o. }

r = ClosePrinter(phPrinter)

c) W( m# ]' r3 T3 O3 ~

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

7 y! X1 b9 H6 M1 T( f5 t% K) h' D4 g

r1 = lstrlen(pIn.pDescription)

+ w& ?1 e; @- _5 E8 T1 \

r = lstrcpy(s, pIn.pDescription)

& Q$ K; ~0 B. {+ y! }9 u* E4 t/ y

If r = 0 Then Exit Sub

$ C3 r2 ]: Z. ^# b% h# _

pType = Left(s, r1)

8 c- U, M* D8 _1 f% U6 |" u

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

+ d# i, e, n- S. C) _ r

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

% c/ F4 u9 s+ E* F5 |2 K+ h

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

* n+ Q8 M: ^+ Q9 J, ?: `

End Sub

. L0 C$ N1 @: X

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 04:02 , Processed in 0.447249 second(s), 52 queries .

回顶部