QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

, R" c4 E6 n6 {# ^

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

5 N, V0 l3 b; |$ s( w/ S" _

建议大家结合MSDN看看

" l1 A3 B6 G7 s/ H Z' [

Private Type PRINTER_INFO_1

3 K( E8 F- D% U; e

Flags As Long

3 K5 a; _3 f, O2 q! h+ |

pDescription As Long

/ Y+ e% K% x/ T* j, k. }0 q

pName As Long

8 J5 M! h2 D$ ^/ v6 O) C# g# n

pComment As Long

" M% j- O$ d& g& Y& L; z7 l

End Type

9 T% f, V& v' V5 y5 Q

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

( G$ X& y& l5 q' C; Q

Long, ByVal hPrinter As Long) As Long

6 \4 s7 }# u4 m' A0 b- A

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

0 b7 a) x% o# c9 N$ G# v

Long) As Long

p7 s5 U# q! V0 h4 q) s) i

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

; |2 y) {( S1 [' K/ @6 o5 o

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

6 y1 _# ]' y" T

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

+ x: n4 R% D# L+ j9 T

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

5 w& Y4 ^7 a0 K- @3 z5 ^

Long, pcbNeeded As Long) As Long

6 q7 \' N1 ~" t0 Y5 B

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

" Z, }( Y6 _# E" W

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

/ M* N5 t1 v8 [" C3 ~' n" O7 s

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

+ L7 Z3 {, ~$ v5 n$ n1 v5 I( O

ring As Long) As Long

+ J2 |, n6 J9 \4 y- l$ q2 M

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

5 y) i& w% P% n3 v5 \

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

% ?8 u3 A0 D' p# j; o8 l

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

, M6 v1 |! h6 n$ {4 ]+ w* p

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

3 l* P7 e {/ r$ B+ k( R- v9 W- Q

'pDeviceName是打印机名

5 n' x7 t2 @4 }& [& g

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

2 g# ~6 j; z, c, v; i1 q9 ^

Private Sub GetPrint(pDeviceName, pType As String)

' r0 l! t6 ]$ L) q' T8 @& _: L7 m7 Q

Dim pIn As PRINTER_INFO_1

- y8 H6 G. N3 ?8 x4 ^+ o

Dim s As String * 256

) H, v" R; I5 y

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

$ Z+ @7 S6 D q6 y* u

On Error Resume Next

6 H- g, A# g% g" w6 L

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

0 I% W2 U; u, K8 X, \1 K3 }% x

If r = 0 Then Exit Sub

( ^6 l' l' d4 o4 K6 W( L5 t# E

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

+ g3 ]* L7 S3 p% y

ReDim pPrinter(r1) As Byte

1 R, r, k- c( Q- V

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

) B5 B. \" t+ U7 `( J- c

If r = 0 Then Exit Sub

, { q( d3 C4 e$ `5 {

r = ClosePrinter(phPrinter)

- g2 F8 a( {% c+ u) L$ I

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

/ r8 J7 s& n+ Y( y7 X+ k' Z2 o - A4 T, i3 j) g: _

r1 = lstrlen(pIn.pDescription)

0 S/ K, \, F8 C0 s

r = lstrcpy(s, pIn.pDescription)

% {8 O+ y. a7 ^9 C% s, G

If r = 0 Then Exit Sub

; i, ^2 u; V/ |% G, f" m# Q' d; e; F

pType = Left(s, r1)

" I0 X* g0 c2 |

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

* @! Y) R) W9 _4 D8 `

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

! N n1 `4 p- d' l7 W

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

) X. j. Y5 b4 @& ^. L

End Sub

/ f- B* m' W" f7 X7 o! [' y/ Z% x

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 12:21 , Processed in 0.392296 second(s), 52 queries .

回顶部