QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

: c9 }* w; o1 g4 G, r

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

3 h+ V+ w& v" a! Q; L5 u( L/ J/ i

建议大家结合MSDN看看

/ {; ^* C- O2 ]1 ]

Private Type PRINTER_INFO_1

1 |: \- [' m: A3 u8 |, h

Flags As Long

2 ?3 D0 |. V3 @, L. P* T

pDescription As Long

- h/ B8 F7 [4 @6 `& {8 W( R

pName As Long

. O2 k) L6 N! m( H4 }

pComment As Long

8 d j. _. E, ~; I. q! r

End Type

' p5 g3 s0 b& y: ~6 a2 M

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

9 Z- b9 ?9 \* Z' ^7 V

Long, ByVal hPrinter As Long) As Long

" M$ X; U. I$ u/ E' X/ A

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

8 e2 C; v9 h* d5 ~

Long) As Long

" d# x. r3 J6 n4 p: i% M/ m7 L

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

; b$ F2 ~& N6 @* r3 W

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

- d9 R3 l/ F5 C) [

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

7 |4 X7 {3 {! t! v' q3 S! J6 r

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

! C0 `1 w* f) V- o

Long, pcbNeeded As Long) As Long

2 w1 {& |$ c& O* G( z

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

r! c0 x9 u" q

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

* V. U2 [+ P2 W/ u( j2 g

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

/ R5 Z/ {# |6 \! N$ Z6 q2 a

ring As Long) As Long

4 j+ t4 j( ?- P1 G6 a2 }

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

. C. L3 Y. M2 o8 f' q, @

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

, |9 e5 i6 V6 K6 j8 ]# |; }& u U1 V0 R+ m

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

; q0 @7 ?9 Z4 ^1 f' u( z

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

4 d# g6 V0 Q" D- Z

'pDeviceName是打印机名

9 T; P4 D: Y, ^* `/ q" P

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

- G* H o0 v" n( ^

Private Sub GetPrint(pDeviceName, pType As String)

# j+ D( d6 d2 L# }* u9 c% ~! y

Dim pIn As PRINTER_INFO_1

4 f% h) P7 `# ~8 h

Dim s As String * 256

. {% q8 L/ k/ _5 ^2 d

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

$ W3 e8 V" c2 u8 q% G

On Error Resume Next

W8 y$ ~# ]: Z, @

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

7 |! O$ ~$ E6 |0 ~

If r = 0 Then Exit Sub

* l) N- o7 W/ E" P

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

8 N% u$ @, `3 N H i- P6 c

ReDim pPrinter(r1) As Byte

" C$ K! A, x) L2 h

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

+ M$ o" I) O, O$ p3 u

If r = 0 Then Exit Sub

3 n6 G; B3 i) G; |% f1 M

r = ClosePrinter(phPrinter)

8 |6 `. ?' m0 j" W, S4 n! t- u

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

& ]4 T5 G* U! z; y7 S3 n, N2 f# Y, D U" K0 x0 }

r1 = lstrlen(pIn.pDescription)

& L+ u* z t+ o& R/ e* e5 v

r = lstrcpy(s, pIn.pDescription)

2 @, ^' x# B. U* r7 U+ y$ ?

If r = 0 Then Exit Sub

3 K& x0 P! _5 e6 j! S$ R

pType = Left(s, r1)

/ B9 Q' _3 ]+ W: j

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

' t0 l$ ~( b! A

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

$ }5 `5 g$ Z4 V/ b& e

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

6 d% A& O: ]$ [2 r7 a

End Sub

* K c; _/ C0 |; e, X. I I0 g

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-17 18:57 , Processed in 0.924674 second(s), 53 queries .

回顶部