QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

! _$ q% _+ ]" L2 W% K

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

8 }- |0 D' T3 d) d4 {6 O6 X

建议大家结合MSDN看看

. n2 K2 r% _1 @1 Y# E6 N. [

Private Type PRINTER_INFO_1

$ r, g# M3 y5 {* T& f5 u O2 m

Flags As Long

`" l; @+ h8 z( W* E2 n' g* O

pDescription As Long

. \" ~1 V& m" J. u& ?2 t0 }

pName As Long

" p6 u' ]% f7 W3 Y, `6 [+ D" ?

pComment As Long

0 p* C& A1 D; ?, z& [

End Type

! E O' S9 a' n, U

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

$ R, u- y0 f- D$ T" x8 Y- s \

Long, ByVal hPrinter As Long) As Long

+ `" j9 l% Y0 W" E! c$ h) E9 D

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

6 i; |" S! X5 x! P% {* P

Long) As Long

9 Z- s; o. O0 G3 Z

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

$ ^& }4 F# d) A& c8 W0 K; s+ D

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

% K8 T& ?2 J2 X

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

5 M5 `- o, p- b

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

* U; V$ x" O+ W H, l

Long, pcbNeeded As Long) As Long

2 y3 H: t7 H( O* d

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

: o5 q9 j. S) M+ K' {, i: F2 ~

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

! y0 r! ^: Q" @ F2 P

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

8 S$ B. o8 v/ }; { [; _0 `0 e

ring As Long) As Long

0 M: n8 R2 q# e5 {5 u# e) \% ~' M* x

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

! o0 x* b# O3 W5 `$ b$ L& c

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

" a3 {, B$ z: c! ?! J/ K) s& J

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

* r% y9 e/ i7 l5 [" U# J6 `

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

* Q4 v0 L6 i3 g9 i# q$ ^( `8 L8 f. f+ l

'pDeviceName是打印机名

, c" g1 l" g4 M/ F; z3 I$ b. {

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

2 G8 J, P/ v, s( G2 F- W ^4 ?

Private Sub GetPrint(pDeviceName, pType As String)

5 i' d B" B0 g# V* r' ^2 B& ?

Dim pIn As PRINTER_INFO_1

: k, b2 |4 c; D+ C# }

Dim s As String * 256

; e, K. g% G4 Y: }+ Y: ^: D

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

/ Y' K; A; r4 Q: t8 l S6 I0 a- w

On Error Resume Next

) {$ T6 u7 ?- n+ D( i- J1 z

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

- b3 U" q* s$ `1 |

If r = 0 Then Exit Sub

8 \5 K; H" m9 a* a* }- m& X

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

. x6 }$ C4 W6 A8 T: V) w3 p1 n

ReDim pPrinter(r1) As Byte

8 W0 W/ d- R0 u1 ]1 \, M$ c9 O& f

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

+ z9 L/ ?9 V3 G0 l" w7 _6 ^) S

If r = 0 Then Exit Sub

" Q/ g3 y( k" K0 Z, r% I

r = ClosePrinter(phPrinter)

7 ~3 T9 P, O7 o: y9 `! m7 W+ n

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

3 T# u1 F; K% a+ f # E9 M0 C8 L3 l$ B% F, t/ U

r1 = lstrlen(pIn.pDescription)

: @7 w7 a; A! ~: c& N5 E2 X

r = lstrcpy(s, pIn.pDescription)

! S$ v9 t! ]: P2 N/ `, m

If r = 0 Then Exit Sub

& I9 N/ F+ v6 A0 n$ s/ p

pType = Left(s, r1)

/ z* j# P1 K+ f% y

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

8 P$ i( g2 P+ p/ L1 o1 w4 ]

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

# O8 X" R! x5 A. O( X1 {* j

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

V; A0 l5 j3 |0 w6 y: w0 [6 |9 G; [

End Sub

3 E' `, y6 Z: g. U, y- w/ 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-4-21 00:29 , Processed in 0.514291 second(s), 52 queries .

回顶部