QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

0 O! s9 e S2 r

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

2 s' W. E, f# ]" O8 j: y3 }

建议大家结合MSDN看看

0 D# H% G- j' _

Private Type PRINTER_INFO_1

( \2 p, @; |! i' J- k

Flags As Long

+ F, r0 N( u" }8 D/ r

pDescription As Long

/ D- u3 W. x( g

pName As Long

+ Z- o, e2 _7 @# y6 ?. M6 h' K B& N

pComment As Long

c" G! J' t9 q6 U

End Type

( Z, T, f- ^ M9 b( z

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

# A# T' b1 x% T$ K

Long, ByVal hPrinter As Long) As Long

5 ~$ g5 \4 f9 H8 t6 O: n" ~

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

6 W* e8 R0 v, r3 ]+ p% ] C

Long) As Long

0 \% i& r% U0 S3 R9 v- K e! ?

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

1 `3 K" w1 @6 N

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

) S4 q \ j+ g* f3 ^

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

% o6 T# e& h" c3 y- A+ }

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

% e6 j. D# q F5 o4 C

Long, pcbNeeded As Long) As Long

$ t8 F. N/ P2 c* a6 O7 E

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

: g6 ~7 J$ Z; K5 I/ n

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

/ S* F0 O$ ~" M `

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

' j9 v; I4 S( `; J

ring As Long) As Long

1 @" x6 j) v+ ] U$ l7 S8 v

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

9 t- h# H- V0 a. I- S: `

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

+ }( O$ c- o J2 ]7 C& E% d4 F5 T

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

( m4 L9 B2 q2 A: H

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

. _5 p+ j9 Z' e; i* \+ X- w: P

'pDeviceName是打印机名

' O" |4 N% {( r& H( J

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

% U3 k |: H, `% l9 g9 j

Private Sub GetPrint(pDeviceName, pType As String)

/ Y! y7 Z& ~$ x* y

Dim pIn As PRINTER_INFO_1

0 R% t+ a( I9 T% C, C

Dim s As String * 256

5 Y# l* F, e( D$ b! e# ~+ }0 {

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

+ i; E; \" Z, b; r& c5 x

On Error Resume Next

& E0 J6 y2 \# M! L

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

5 N5 A1 x ^, q

If r = 0 Then Exit Sub

3 f7 Q O0 l/ r5 Z

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

9 l( V& B5 G( o+ B( _/ t

ReDim pPrinter(r1) As Byte

1 j7 S+ Z* f% r8 Y5 v

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

# J( H3 ?0 y5 S& \6 M" F+ e5 B

If r = 0 Then Exit Sub

* v5 p" q! n m+ X, l

r = ClosePrinter(phPrinter)

: y/ O+ Z7 m ?3 H% [6 g8 Y

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

3 m3 u: s- o- i! l * K) Y9 F0 h" x% [7 d. f

r1 = lstrlen(pIn.pDescription)

; W2 e. } ~- O6 E

r = lstrcpy(s, pIn.pDescription)

1 O# b z* O. q. d: o6 d$ ] @

If r = 0 Then Exit Sub

4 R; A; T6 F( ]! i1 M

pType = Left(s, r1)

- M- e/ d5 q) C& p" V

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

5 c- g$ h2 s3 B) H" g

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

2 }7 ~% C6 c* [* n

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

4 A! z, U( r. E" e$ O2 ^$ V D% k

End Sub

+ |2 J8 l5 x9 H9 e& ?

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, 2025-11-7 19:35 , Processed in 0.440340 second(s), 51 queries .

回顶部