QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

9 b9 a8 m0 V; ?+ P$ A4 ]. j

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

' ]1 W6 ]& L$ _4 }

建议大家结合MSDN看看

) {( f' e) g- m l$ W+ Y

Private Type PRINTER_INFO_1

4 z Z" w' P6 S R. S5 l! W

Flags As Long

w" v# T- Y5 Z \; q& z

pDescription As Long

! D) P, a% h4 d6 P. T- R

pName As Long

" f" L B8 W9 z! A) v- c" j

pComment As Long

: [2 n9 v9 l* f. O! i* s4 J4 z

End Type

# C! h' K8 S0 u" A$ z+ E

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

$ t( v$ m( n7 L4 `. f

Long, ByVal hPrinter As Long) As Long

( i) c6 d: W; n6 z0 \) t5 Y

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

- Z/ H& B/ @; m' f4 v9 ~

Long) As Long

, G5 B$ ?: }5 k& N7 s

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

) ]# d$ U) {! N$ I

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

0 F8 p* H4 q& [4 q A

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

- B& ~# |; b1 Y# ~

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

4 V8 D- |( c& |' v

Long, pcbNeeded As Long) As Long

8 a7 B9 ~8 [: ]+ T# }$ d

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

& {% V8 U; ^: m3 [: q6 a7 ?

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

* i: p! H0 t( P4 d" R7 p: w; {

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

" H T' Q! F+ @) _

ring As Long) As Long

* a& E7 _* I2 {

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

/ l5 N7 M5 p" {7 a9 R9 t5 z

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

1 m% a- I# _4 w5 O+ i. D* a

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

h6 b6 k" K3 N6 z5 p

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

4 Y4 r) R p* ^+ C5 {; C

'pDeviceName是打印机名

* \& x: a7 |; N# K' ]

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

3 b; h/ ^( o; s& @1 ~- r

Private Sub GetPrint(pDeviceName, pType As String)

% Q* F" D7 I: Q; u9 m

Dim pIn As PRINTER_INFO_1

1 O; e% k$ q& S

Dim s As String * 256

^; @8 y" y' X" J+ M% t

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

) R* u0 e& B" a; }* B

On Error Resume Next

7 d- F; s7 F- v$ w4 m2 k

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

% p5 i1 Z1 D7 Z5 p" Q0 v" m! o

If r = 0 Then Exit Sub

+ }, n, i. }0 k- w

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

) X$ Q6 W+ X3 k- {* I+ L/ \0 M

ReDim pPrinter(r1) As Byte

R0 U; m" e( I1 T9 N) P

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

# m/ x& `; S4 W. x# k1 `

If r = 0 Then Exit Sub

# g% t/ ^' T. X7 z* S

r = ClosePrinter(phPrinter)

' e2 j. o% o9 C# N$ v( M+ H

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

# [' C$ y/ r4 K+ t c* w7 Q$ D1 ?. Q" @1 F, G) V

r1 = lstrlen(pIn.pDescription)

7 D8 N* y3 r5 D0 X, T

r = lstrcpy(s, pIn.pDescription)

2 P9 C$ Z" h# i; F: V1 t" k

If r = 0 Then Exit Sub

2 c7 ]3 M) p- B# L I X

pType = Left(s, r1)

, G9 M0 q, e+ e3 B7 U7 ?

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

7 ]( d* k& ~" I k0 N

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

7 l2 V h- o+ O

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

, p* V$ b R3 }/ K

End Sub

, v. H# N6 a; |6 d- }6 f- V

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-5-5 20:56 , Processed in 0.394585 second(s), 52 queries .

回顶部