QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

: q# ~, R9 B/ J; L

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

) R, [2 I( O- d4 _) {

建议大家结合MSDN看看

5 t0 L( _# h0 W

Private Type PRINTER_INFO_1

9 i! s1 b9 H$ Z

Flags As Long

* K. F& n2 U% y4 n! H

pDescription As Long

/ a! s' ] A9 W* q1 V2 w9 Z

pName As Long

& Y4 R) ?" ]5 _5 G1 I4 F

pComment As Long

( g" N2 ?$ F4 f6 `9 r

End Type

2 ~$ y6 B# r' l! t( S

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

6 j; Z5 `9 i/ m9 T# _

Long, ByVal hPrinter As Long) As Long

2 d: o& A7 B' `& O

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

/ ~' L6 p8 Y, s( O" F5 W

Long) As Long

# I2 I5 Z6 O+ o- g0 u

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

5 n& j$ f- M. I3 X$ K

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

7 _# ?* M0 ~, N+ E5 S2 ^

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

7 {+ a: O4 f& v) W

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

8 f' g, l& C5 j3 E3 V! ?3 u' q

Long, pcbNeeded As Long) As Long

& {( k& m6 S( p: _- k+ T8 Q

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

* q+ _7 f9 ]6 J5 I

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

5 k7 x7 k- f& o- f& s

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

8 ?! {8 b% f" f; f: B( I" R

ring As Long) As Long

8 S+ r* i% C& g1 M/ s0 N/ F

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

' r/ D1 m! v, S# K9 k2 p- [, l: e

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

% t8 `2 f" p, W( I# D, e

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

2 x( R! Q$ M7 s8 _- z) a. n

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

% u! e9 ]2 ?1 W" w. ]# i$ I4 S& ?

'pDeviceName是打印机名

8 e' K; g3 @6 Z9 P2 {

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

: h: q0 G. \! P+ x

Private Sub GetPrint(pDeviceName, pType As String)

3 I4 {9 e* S$ Q2 Y7 i

Dim pIn As PRINTER_INFO_1

! \4 M2 A& U' L5 U3 Q1 p( C% W

Dim s As String * 256

; |3 k* r4 B2 j3 Q

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

0 @3 a4 g2 L9 r+ t1 b

On Error Resume Next

9 b5 l( f3 E3 | B- h, Y$ m U

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

9 h- e+ K& H8 E7 i7 F& Z3 w, T: ~

If r = 0 Then Exit Sub

3 L& [0 c4 }5 z0 O, M

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

( A! {" x$ |, A2 C6 I

ReDim pPrinter(r1) As Byte

" c5 o6 J) d% K- E1 O4 Z% ~' l

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

# E! z" U; L8 [! ^+ K" Z

If r = 0 Then Exit Sub

( J! d: ]- w1 y8 e

r = ClosePrinter(phPrinter)

+ M2 I# r4 d E( ]

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

. m9 t0 p+ o/ V2 Y: [; V9 O3 l8 U; t' V

r1 = lstrlen(pIn.pDescription)

: u* y: N/ ?# S

r = lstrcpy(s, pIn.pDescription)

8 P5 D. O @. E

If r = 0 Then Exit Sub

) M) P7 s: l0 T. T

pType = Left(s, r1)

" l( x: `: ~0 I

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

: P5 B* D6 @& B/ v) {0 N1 b, L

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

& N9 |/ o6 X; Y0 s2 p# i6 f, w

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

* } I3 Q% A) s

End Sub

7 }+ s+ J' S% M+ r: 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-6-11 17:56 , Processed in 0.386007 second(s), 51 queries .

回顶部