QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

! U& x, r+ o. _8 i, g1 A( _

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

- t! u: N/ L Q9 m& I: J9 ~* r5 B

建议大家结合MSDN看看

) h" A" ^! J* I8 L% V! c

Private Type PRINTER_INFO_1

+ {% T7 H8 U) ]

Flags As Long

& v; d! X; k9 @; x$ P( `% P& R( w

pDescription As Long

( N- J% r7 C7 u$ W* W: ]# D

pName As Long

% r* |* ?) J3 c& K, o

pComment As Long

1 c! }0 d, P! F8 C1 ]0 i i

End Type

7 n8 r1 V+ E( ` b" C' _" b

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

: x' v) q. @* N6 X0 v# |6 Z3 [

Long, ByVal hPrinter As Long) As Long

! ^5 `( q' f( Z/ `) E& {5 q

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

+ V4 K- g/ E* C7 j: N0 o6 Z

Long) As Long

$ ^& a. M! h" Z# o2 v, ]6 Z

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

! {, W5 h0 O! l2 i ?5 R4 @; f7 j

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

: o8 t( J( y8 M' F' L- Z

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

1 J& M. d) V9 D) e* a _- I) Z- D

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

* _5 e% q, t) }2 z( j1 N. \% R

Long, pcbNeeded As Long) As Long

q( _) o3 k- Q: p% R. z! G4 [

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

, F- q$ W7 g4 T6 z

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

[0 Y, M% k4 N& N+ a5 @ }- s- e

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

h, K, y) M: @. [5 R

ring As Long) As Long

5 ]! W7 {/ J/ z' P

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

2 Q, p$ q1 L/ }2 Q4 @9 m

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

3 \; {, m2 a3 s0 S& D; v

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

4 T. b" Y& w5 d2 u6 @

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

; i4 T" Y4 j6 J' z4 ^! L4 l4 K

'pDeviceName是打印机名

, v: E) t/ _& q* Q) n9 Q- d8 J

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

) T$ X: q2 {; s. r$ O+ q% W

Private Sub GetPrint(pDeviceName, pType As String)

8 M0 ]' m- ]) S/ \/ e8 G( z& q3 J

Dim pIn As PRINTER_INFO_1

+ a; n4 z( s* l0 Y3 h0 e

Dim s As String * 256

. B1 w) G# K* c+ w% x9 y

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

; x/ o3 G3 B4 ~* e% g; }

On Error Resume Next

- a- h. J2 s, i% _' i' [

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

! y8 E H, e4 d9 ?. O

If r = 0 Then Exit Sub

+ S, t) U; ~* T6 L, [

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

. p9 R2 }9 L* H

ReDim pPrinter(r1) As Byte

! V+ Y8 g0 K0 p6 _ Z+ {( ?. l

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

1 W E9 n/ ~8 s1 ?, z* j( I3 v

If r = 0 Then Exit Sub

0 R9 t1 ]* v- K) ]; B/ u6 ~. V4 v

r = ClosePrinter(phPrinter)

' O. `2 X! M. X) `; H7 n$ |7 G. Q

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

" s. D5 Y+ I7 o: Q8 _2 w 1 v7 M7 y- l1 i

r1 = lstrlen(pIn.pDescription)

3 g; ^9 Q4 W) v8 ]0 M

r = lstrcpy(s, pIn.pDescription)

! L) {" ?( r" } }3 X4 O1 V' }# h

If r = 0 Then Exit Sub

7 W& b6 l- q2 ~

pType = Left(s, r1)

0 ?/ c. i# c h0 _

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

4 c$ [; b! |3 r Y& z; `, z4 A

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

2 ~2 {3 N4 E4 P4 q$ V! E# q

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

1 B" O1 R9 M' h: m

End Sub

$ ]: x7 Q# T5 O! ^

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-11-8 10:29 , Processed in 0.278473 second(s), 52 queries .

回顶部