QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

3 _& y, _6 B; k

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

" R( c- \. ?0 ?) q

建议大家结合MSDN看看

/ o5 W/ V. m5 E/ ^- e" s, H* ~+ B4 A; F

Private Type PRINTER_INFO_1

0 E4 T9 ]( O# J: `2 H1 `3 L

Flags As Long

/ n! h; p7 n5 l! g* a

pDescription As Long

* A' [: r4 f% S9 h3 }. I

pName As Long

/ a, u- x: {: Q: r0 R: w- b& h

pComment As Long

; t. J A0 ] M! U! ~) n0 d

End Type

& ]1 J: ~0 S5 e- e

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

& Q; _# P8 _# J- ~: N# m

Long, ByVal hPrinter As Long) As Long

& r# E3 a {9 G6 |* [2 @ q" n

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

6 J. p( @. U, i' X9 A

Long) As Long

$ Z$ {2 e: E% U6 E1 q

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

: v& E# S$ X' k1 u" u, H8 z

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

5 m% {4 X# C( j. x5 W0 M

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

* U2 h7 [3 W' x4 p2 }! B9 M8 h( h9 }" M

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

$ W* V {, p7 C1 t. t, B

Long, pcbNeeded As Long) As Long

( Z. ~* }" P1 F1 d+ P

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

: ]# {8 _- s8 u; {: D

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

8 I' K# Q+ A! O _% k& j& n( C

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

u8 n. Q8 @. g3 e' j, N

ring As Long) As Long

7 @6 }& p2 ]3 a" l) s; J( G

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

, G7 O, c# t9 z" k

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

1 e3 I! p5 ]0 _" Z, _2 w9 o

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

. P% w) q+ Q7 u$ U: W" V6 z! B

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

( g# h( Y7 B/ |8 C

'pDeviceName是打印机名

$ B; U0 W3 K) A: M1 Z

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

( d5 b( K5 J' g- Z

Private Sub GetPrint(pDeviceName, pType As String)

" ` D! O Z0 Q2 x. X- h' i

Dim pIn As PRINTER_INFO_1

( D+ v7 j+ @( m$ Y1 t/ q# ^ @$ s

Dim s As String * 256

5 F/ z8 O* t& N J

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

' Z7 f4 i, }) d: C

On Error Resume Next

+ V$ y3 J4 A- G) Y

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

$ k9 j$ ]5 t7 |% Z8 ]& F

If r = 0 Then Exit Sub

9 b' M: t- }# F; N

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

4 [9 z+ }+ w5 D$ s3 R2 T4 [

ReDim pPrinter(r1) As Byte

& d; T8 H2 m: b( |9 h- K" M

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

$ ? K" C/ }+ b; \" b" ~' W1 V7 b

If r = 0 Then Exit Sub

& A% G/ K/ n; D7 T

r = ClosePrinter(phPrinter)

: Z! N8 S. d2 \

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

+ G$ K5 _: b9 _6 R. e ( Y) O: P' k1 S$ A5 [* j

r1 = lstrlen(pIn.pDescription)

, N5 x* R. G# o+ H h

r = lstrcpy(s, pIn.pDescription)

) X f( L( X! t* G2 S; ^1 i

If r = 0 Then Exit Sub

% I' e2 \9 d s3 o4 c1 z

pType = Left(s, r1)

: k% |) l( R/ p1 u }3 r8 f

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

F" \& S2 u/ D: D& G \

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

% Y2 S6 O; {9 \

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

. y# C/ I |0 K4 p. ]

End Sub

& Q) z! F; W- K8 g: U

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-10-14 07:46 , Processed in 0.333695 second(s), 52 queries .

回顶部