QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

0 J/ @6 Z9 e) u7 N3 f5 o

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

- j( l8 O# S0 p9 w

建议大家结合MSDN看看

+ J M, v5 @3 J$ e) Z

Private Type PRINTER_INFO_1

5 m) L4 z% D7 @% F p/ Z+ ?8 P, A4 U

Flags As Long

i/ A8 s0 V; A! F5 i3 f# d

pDescription As Long

' y( l7 [( ^8 H4 e' a

pName As Long

8 i! R9 k& H% v W2 G! J+ [# Y

pComment As Long

/ g- A% P" U3 @# [ e

End Type

; N) a' ]( S& e8 |2 v1 S0 F

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

5 l. {: ~' P# p: H& P

Long, ByVal hPrinter As Long) As Long

$ A- A* V6 w+ [

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

3 V# o$ e9 C# B/ |$ V; u, W% R

Long) As Long

^+ u0 E1 j0 }

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

! K& c" x0 T) w' a

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

0 A$ V5 z$ E0 Z1 H

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

, \! o/ g) n' S

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

Z! _- \5 }) ~" E

Long, pcbNeeded As Long) As Long

$ Q; Y/ U4 R* P0 M! D

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

% F( |. y* ?7 U3 \# V8 E( }. e

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

M3 Z- c3 _0 o8 U+ r, E) t3 T2 P$ Y

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

# {2 U* b" F4 n6 C" w

ring As Long) As Long

1 w) S4 H( |- k

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

+ i; K" _5 @$ `6 W

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

0 J5 A, f3 u7 p! i

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

7 l0 @0 m( z1 g; z

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

0 ?; |" `, ?) S( u4 t, s

'pDeviceName是打印机名

. q6 L6 r" P1 z; o3 V

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

' d% [8 Z" r9 ~" u: R6 }

Private Sub GetPrint(pDeviceName, pType As String)

0 |# O( l% \4 H E" q% _. X+ Z

Dim pIn As PRINTER_INFO_1

1 R9 w8 K5 t! ` g' _/ E$ H

Dim s As String * 256

4 M' x. a8 A# ~" R5 ^% B

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

1 q1 \, s/ u3 O# G8 h X9 Q5 C

On Error Resume Next

5 I" g1 ^. P' ]( A

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

. }! w2 t, A) i9 Q

If r = 0 Then Exit Sub

1 {+ ?0 e, P+ U/ @, Z/ z

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

( `6 J7 m3 I; x* s' U6 X

ReDim pPrinter(r1) As Byte

8 F& ]" O. X3 _* r% V+ L4 Z

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

; U7 a6 ~& m* d

If r = 0 Then Exit Sub

7 ^' v7 e( @8 `8 a2 c! q" d; ~+ C- N

r = ClosePrinter(phPrinter)

* \! Q, D5 f1 L7 l

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

9 d/ k# N# v7 I* A/ F: i P& ^, @ ' k5 R; E* @& C

r1 = lstrlen(pIn.pDescription)

6 L7 W: P6 j6 N% M

r = lstrcpy(s, pIn.pDescription)

2 e2 g7 v) F& h5 d0 J9 `3 G

If r = 0 Then Exit Sub

! T& e, k5 U a2 N/ w

pType = Left(s, r1)

( A' {' C4 o. l/ z G

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

( K/ M0 s+ j8 W3 E) y

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

! Q( |; I, E+ D, E* R

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

# w# J4 g: ~6 Z! |8 J5 |3 z

End Sub

! J$ q$ S, S/ \

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-8-23 20:54 , Processed in 0.294242 second(s), 52 queries .

回顶部