QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

& T6 P6 P: K, W! O! X+ I' b

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

3 P; m! m. `% i f5 S" M

建议大家结合MSDN看看

0 \$ O2 @! y: ^$ L8 X* Y

Private Type PRINTER_INFO_1

4 Z Y9 q+ b' m

Flags As Long

$ v, h9 `# X, V' H6 g' ~2 g

pDescription As Long

5 n1 s, c: V9 S) o' }' ~

pName As Long

8 C6 m) q6 J; O8 i

pComment As Long

5 c" J" M" M% r3 f. ]- U: i1 V

End Type

/ g8 n" j& v* }) [

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

" r8 L( W- |! _

Long, ByVal hPrinter As Long) As Long

6 q" A+ ]4 C, e5 S% g+ R2 O) r9 B

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

0 V: ?- K) i8 E+ s5 L' m. l8 D

Long) As Long

1 }: `/ P a2 g0 {9 C [

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

S& a$ z6 }0 s% }) F2 m

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

6 p! z& J% a* k k& M

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

5 J' u6 J; ]& f: K; V$ n

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

0 b8 b& l$ K4 V4 v9 z

Long, pcbNeeded As Long) As Long

2 D0 t9 B3 b7 v0 R1 _

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

7 s5 @" A- A' b" x# f3 W

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

0 f9 y8 M Y+ G4 F

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

9 a9 ? C( g9 }3 @( ^0 K

ring As Long) As Long

- a# @; j0 I2 D6 A

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

( ^' z8 {" u7 h2 f; {4 O

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

B& D- Y/ r; o0 D) M$ N, x

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

/ S; w& V- ?' Q, _

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

. J- a% K& \% N9 o

'pDeviceName是打印机名

% f; j& _! P4 I' S+ X k

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

( s8 C: A/ a+ C9 J& j/ m# Y/ X" O

Private Sub GetPrint(pDeviceName, pType As String)

, u$ c' q8 \. t7 C: E

Dim pIn As PRINTER_INFO_1

( n/ T. h5 Q; O

Dim s As String * 256

5 j* c Q; O1 z/ x! x

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

4 W' j& ~; q! d# V- B

On Error Resume Next

0 X2 V' K& t3 k

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

! L7 n$ o( y, {8 ?/ D, Y

If r = 0 Then Exit Sub

# i6 s1 } Y+ ~) B

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

( b8 I7 \# z6 w) a- B5 L

ReDim pPrinter(r1) As Byte

6 o* J0 i" Y' v ?

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

. T. h5 `) ~2 s- x6 I; D( N6 j

If r = 0 Then Exit Sub

( [( l8 c* S T7 z4 T! [

r = ClosePrinter(phPrinter)

% Y/ H6 I# O6 M$ a8 c4 J4 g) x

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

5 |, {2 D3 x0 S+ N( K6 U2 f, s& @. Q

r1 = lstrlen(pIn.pDescription)

, K( C4 A" ?7 _3 D8 { ?0 G

r = lstrcpy(s, pIn.pDescription)

9 s, l/ {1 l5 O1 F+ B3 Q4 H

If r = 0 Then Exit Sub

' t" _* F) u' k# Q1 I2 W b. H4 I

pType = Left(s, r1)

R: B* K- F) Y! A

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

' G( ]. C/ r" h# Y. D

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

3 U3 t" }+ y" p6 O8 p: z

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

$ f' U. Q: x8 q: l( l! c* m

End Sub

) D; I) k/ Z8 V9 c6 a

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-22 00:46 , Processed in 0.402013 second(s), 52 queries .

回顶部