QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

( K7 g2 h' }* w/ Y# N8 T

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

) m0 }8 F% X9 R f

建议大家结合MSDN看看

9 H: S# m5 ?% x4 {6 O

Private Type PRINTER_INFO_1

' W" g( M! V: e2 m/ a$ I

Flags As Long

5 E& v. T9 ?0 C3 Q

pDescription As Long

# k3 A# c5 O) v0 u- U2 j

pName As Long

- S6 d) Y5 s5 V: I5 Q

pComment As Long

+ p$ d$ y& [7 d3 b

End Type

' ^# W% l* i6 z$ H& _+ w$ U

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

4 |$ z4 r1 Z, s5 b- ^: `

Long, ByVal hPrinter As Long) As Long

& R( {( x. D1 H% u2 }

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

& X7 ~/ a2 l B5 s8 c: F. R% `4 ~

Long) As Long

, i6 O% x* g2 {

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

7 D% o: X' _( p4 F) c: ^! ~/ Y# x

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

; P( \8 o9 T# D2 t; ]

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

7 S% R' o, T' ^& Y" T" X* x8 T2 F: M+ d

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

& K `3 q) f$ f8 i r

Long, pcbNeeded As Long) As Long

$ |/ i+ O4 ?2 V* E0 i

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

& ?1 K: P# h- P) |& p+ L% r5 W

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

: z2 H' t# U; G

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

& B" ~$ |$ B) |

ring As Long) As Long

5 [; n, A9 n0 {* v$ r0 N, O4 O. i8 r

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

9 \. l* { q+ _/ M% G+ ~/ [4 a

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

1 A8 F3 d# h3 E

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

6 ]' m$ @& a+ M1 Q' V& ~

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

0 f2 E0 W; h% L6 H+ h/ A: \

'pDeviceName是打印机名

9 I# p, q' _+ Y

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

" Y5 w" x2 h1 L4 M4 a: B

Private Sub GetPrint(pDeviceName, pType As String)

) h3 g# w- K% O! I7 L$ w

Dim pIn As PRINTER_INFO_1

" a6 d+ p4 b, N: d' a1 U

Dim s As String * 256

4 Q! E1 X1 y6 E/ h, ~' @

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

" Z& S. t5 E9 S6 z) A# v; _

On Error Resume Next

6 `$ v! P/ U6 z/ U9 ~

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

! U0 Y) S- S- {! F

If r = 0 Then Exit Sub

0 x& y6 {* B/ ?3 u8 O

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

, }* X( V, G# {3 o ~

ReDim pPrinter(r1) As Byte

. X: J3 B* w; M2 S9 P4 |$ h$ ?

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

# r7 p" x& z v: v+ d0 o

If r = 0 Then Exit Sub

V5 M/ i9 I# P- g. L

r = ClosePrinter(phPrinter)

, e7 W7 m0 k3 u: z( e8 v$ a% O

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

4 O% {2 J! g0 _; Y: |1 d . r( K& K; e( L" m2 r" w

r1 = lstrlen(pIn.pDescription)

" [5 f1 q# b% y) {; H1 {

r = lstrcpy(s, pIn.pDescription)

L. f% S3 k# e& U8 X3 x

If r = 0 Then Exit Sub

$ }' J) r g$ c

pType = Left(s, r1)

0 d( l2 A$ J6 i5 Z' t& p3 M. i

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

, G0 A0 G0 |! L

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

0 ?! n/ k0 |' e. H g% U

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

1 G+ M0 f7 y- r, ` K

End Sub

9 @( `5 K) U6 P1 K: i! H( W7 \

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-8-7 18:34 , Processed in 0.438071 second(s), 51 queries .

回顶部