QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

. f2 @2 H0 C# k$ f! x

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

1 ^! B- O& t/ F* [2 P/ h" J; z7 y

建议大家结合MSDN看看

2 U+ Z# F4 N' U1 p3 `+ D

Private Type PRINTER_INFO_1

: V, @+ e' Q4 H5 l( H

Flags As Long

+ l4 `% ^! H- M$ i9 w& q! I

pDescription As Long

: S* b) c I$ ~; U

pName As Long

+ {0 W9 s8 _# K7 M1 {; W

pComment As Long

8 r9 j O) W. d2 r

End Type

7 ^. P8 @. t' N- L m8 O

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

4 C3 K8 l! |& r# O5 l& T

Long, ByVal hPrinter As Long) As Long

- ^5 e9 _6 M" a6 a4 K

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

$ g+ [' N# j' |+ I

Long) As Long

: m* |/ o1 Z; S

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

; F1 F a# E" ^; N& L# a( c

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

. H0 @& Y' |% W, I

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

9 J: M" n( t' Q0 m" C/ H

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

" }8 G1 s0 a( D

Long, pcbNeeded As Long) As Long

h8 u+ R4 X0 [

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

5 M3 J9 _6 `0 `8 P2 K* o0 T w" v

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

) ~6 C) G7 I' f' h J0 |

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

# Q+ L3 k/ U! n" m- j% B

ring As Long) As Long

; b8 I$ ]5 Q9 ?$ b4 c& H& V* E% v: Q( |

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

9 R- I5 o7 |- H5 @# p) S2 u

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

2 ]0 T5 c) \# ^4 ? a J: J1 d, U

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

9 x2 U, ~" {/ s. h! V2 j7 u/ D" M

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

& L8 ^& \: e; j; V/ H2 D) n7 }8 x

'pDeviceName是打印机名

- ^" P+ M: [1 L0 M! V0 _& f0 `

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

& G% r6 _! \ Q/ ~8 r4 L2 c

Private Sub GetPrint(pDeviceName, pType As String)

% u/ e3 V; y, K/ |4 E

Dim pIn As PRINTER_INFO_1

7 c, E4 z& E( [# Q, n

Dim s As String * 256

% _$ [- E& A4 E. I2 }

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

7 j4 s! W. ~: U' c7 G; V

On Error Resume Next

& J/ o0 c& N/ I

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

5 N! o+ x" \. d- ?# ~0 x6 U" i

If r = 0 Then Exit Sub

0 x3 a; P; h1 w6 c4 t

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

% g; D; o! o6 W$ S4 P

ReDim pPrinter(r1) As Byte

5 i9 y, P4 H8 Y/ E. p

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

7 N8 s5 r& `% e8 l0 s- F

If r = 0 Then Exit Sub

' G: o2 X: w0 t

r = ClosePrinter(phPrinter)

9 a6 ]9 [+ o Q# q, E' @2 E3 \

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

) h0 T# h3 r- H' ` 5 N9 O% x$ z5 V2 C; h w$ ^5 b2 q

r1 = lstrlen(pIn.pDescription)

7 q5 C# H1 ~8 f0 s

r = lstrcpy(s, pIn.pDescription)

3 C8 f' L* F" H6 ?7 `+ n/ p

If r = 0 Then Exit Sub

: ?' N2 x/ ]" S

pType = Left(s, r1)

! ] L+ }8 d3 K6 i6 l

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

* Z, d/ q3 K* i' B+ a: X5 v

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

& U9 }: `' v/ i8 {

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

1 P- O E* G; H, [: S3 l

End Sub

8 {1 N) a7 r: c/ o( p" b% y+ T

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-6-11 07:43 , Processed in 0.579972 second(s), 51 queries .

回顶部