QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

( ^. P& G, B! H- ]2 \$ y

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

; T- s$ ~. i. \6 b

建议大家结合MSDN看看

& c8 h+ p, p' E9 k) M, M% U5 s

Private Type PRINTER_INFO_1

, `! H' n+ Y4 g( r2 U+ C

Flags As Long

5 G, t2 k$ h0 ]! \4 \

pDescription As Long

+ q k! Y2 Q4 t2 a) N8 g

pName As Long

: X6 }* t0 w( z5 T) m

pComment As Long

- P0 o4 @' h p/ ~2 R

End Type

/ p- i+ A1 E) m, K2 |8 ~3 R3 u) s

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

* y' X8 M7 {" D! E3 ~! Y& s* M+ ~

Long, ByVal hPrinter As Long) As Long

2 q# u7 A- b/ d% j! k5 O

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

: S0 ^9 N! ~& X" n. g$ @

Long) As Long

4 U8 K6 j+ v2 ?5 E( @1 ^

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

+ R, O: M% c' T6 T0 M

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

' |! x( f- }% f. v& E4 ?5 H3 r0 n2 c

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

5 z" z( h0 I# \. I" R e

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

2 T, q( X& c; D) |" @

Long, pcbNeeded As Long) As Long

( b. k/ }" w8 S9 E( S2 J

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

% l+ E9 r0 q* l

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

! k8 {3 b `1 `/ Q2 d2 f8 p+ d

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

, R8 r/ }0 ?# n& V& J

ring As Long) As Long

; W# o" w- L1 Q# h* Q, m

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

" s" _2 }8 W: U6 V4 s/ q

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

, l4 j* R) g% c4 Y, y8 M m

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

. i1 |% h( {* e3 ~" z% s: r" n

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

: f* S; k3 n( y3 ?; e

'pDeviceName是打印机名

' Y: U# `5 |! B8 d

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

7 z( u9 `8 ]0 I* H( \

Private Sub GetPrint(pDeviceName, pType As String)

3 |& Y1 @5 w8 m4 Q' E

Dim pIn As PRINTER_INFO_1

3 T4 V( h! B) I1 I0 x

Dim s As String * 256

% _- p/ N7 O, I8 y4 }

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

& A0 x5 ^2 i: j2 i" Z

On Error Resume Next

$ S% h* `( M* t2 m; G/ d7 {! C9 m6 P" m

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

! _; ^5 m9 J; v# P! L* S

If r = 0 Then Exit Sub

$ V; d4 A/ B6 t$ T. Z

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

% f3 J7 y8 U1 [# n6 ^

ReDim pPrinter(r1) As Byte

+ O6 [2 }- a" l; g5 J

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

8 ]5 G" s& L1 M1 B) C, u

If r = 0 Then Exit Sub

9 N' }/ r1 O Q4 P _8 p

r = ClosePrinter(phPrinter)

9 U7 ], U* `7 D# l; q

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

^& I6 K: X6 V! e# i0 d* {+ _5 M# W

r1 = lstrlen(pIn.pDescription)

" M! q9 p( r% _

r = lstrcpy(s, pIn.pDescription)

$ z% ]3 Y) B3 [- d% l

If r = 0 Then Exit Sub

& I7 P$ O k" R! R/ Y# s: ^, {

pType = Left(s, r1)

$ Y3 R) [# @; r9 T+ R2 A! t

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

5 B8 p* c1 T! w

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

- \% h& E0 Q2 N* c3 |; Q2 T5 ]( K

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

1 }! f9 \6 _9 b: q/ h9 W9 ?. |2 o. f

End Sub

# }, A% a' m# [8 ? \

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-7-3 03:09 , Processed in 0.273123 second(s), 52 queries .

回顶部