QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

- P9 D) r+ x0 ]6 P4 g5 |3 ?+ O: T$ [

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

4 ?6 {4 b% T8 M& ~; E) D" c

建议大家结合MSDN看看

, {2 @8 m1 U. ]" R: i' B3 E" e: {, u

Private Type PRINTER_INFO_1

! K' x3 b% S# u) t6 h

Flags As Long

$ b/ ]2 j& v' W- N. j6 X% v

pDescription As Long

; h1 M, r0 T: _6 S

pName As Long

. P. s/ I# |$ N- F& U

pComment As Long

2 _/ w, _* |; p$ d/ @( J& ~

End Type

( v' [% b/ m6 R+ Y& Z

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

. N2 S" }: f: I% B

Long, ByVal hPrinter As Long) As Long

( E0 a1 N, M5 B ?2 H

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

) V8 R3 L* x! M# b) P s. T L

Long) As Long

5 G8 r8 m e" B; }% E1 v* G

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

/ R2 } I& w, [

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

% B) I2 R: c- K7 Y* C+ o

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

Q/ C' t7 P5 u L

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

$ D- H5 b1 [/ P p! |

Long, pcbNeeded As Long) As Long

, c* E2 k8 ^- X

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

9 T4 q' u8 h2 E/ ^$ n4 J+ d4 x' r6 U

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

# T7 p5 i+ d3 T: ?; t& V. O7 A. k

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

' _2 c- W3 |* R9 i$ b, B/ d. v

ring As Long) As Long

6 i( n; D2 O: t; O. w. v

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

( w) @( k$ n+ Z- D! J

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

& y. s8 c4 p, M' ^

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

& J+ l0 |$ Y& C9 a' ?$ X

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

! V7 S0 \' |7 h' ^' X& z# p2 ]" v

'pDeviceName是打印机名

( x+ O% o9 m% ^( x e& A3 H/ s

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

' J4 z' |7 w, o/ S, Y6 U! T" [* O1 c

Private Sub GetPrint(pDeviceName, pType As String)

' [+ \' T6 Q) r$ d5 y

Dim pIn As PRINTER_INFO_1

! I$ ^' D" R1 @2 W

Dim s As String * 256

& }0 @$ s0 ?6 O$ h

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

& h0 r) I/ _, q8 x2 V5 V+ P: Y, l

On Error Resume Next

3 ?; j2 A" _! `; p

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

* O3 A- ~ C2 C6 P; X

If r = 0 Then Exit Sub

# t h' e* ]+ F) C6 D1 X) h$ ~( ]

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

% P7 m. f- G- E' u4 w0 t

ReDim pPrinter(r1) As Byte

8 p" Y$ j; I7 B- x

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

3 `, q$ o" [) {4 U G

If r = 0 Then Exit Sub

0 W( {3 Z( o& `# m! F

r = ClosePrinter(phPrinter)

9 t* j8 c5 d. U* A& n8 l. z: j

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

/ r1 z E5 C, k X* T) u 2 t V. o3 `3 x1 e: k U* b& K; L

r1 = lstrlen(pIn.pDescription)

& i4 A. ~: F3 i9 P+ i

r = lstrcpy(s, pIn.pDescription)

; E4 g% `( m" s& V: e* @

If r = 0 Then Exit Sub

% t( i# ?& W+ \9 }% s4 M2 s

pType = Left(s, r1)

4 t9 g4 ^( l" A' H

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

2 d" a1 B: \- N# S# ?/ H

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

5 _% A9 O3 d/ @

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

: Y: ?5 I9 f8 ` l% k' ~

End Sub

7 C) p: A3 {8 Z1 D

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-4-21 05:45 , Processed in 0.384050 second(s), 52 queries .

回顶部