QQ登录

只需要一步,快速开始

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

几个打印机的API函数

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

9 g5 \ {& B* |1 T! {* B' Z

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

( t' m9 n; {2 a8 ?( J% [( J( F

建议大家结合MSDN看看

8 Y, O2 F' x% `+ y- {3 X

Private Type PRINTER_INFO_1

- U- l% H; M. w6 @; q. y& v3 U

Flags As Long

/ I* Y1 A8 C5 o' i7 l: }5 }7 [

pDescription As Long

& E; z0 H! I6 i) `7 ?

pName As Long

* B( Z" Z- d5 i2 J

pComment As Long

) L! @! m9 A) Q( I# h( c+ Z

End Type

* n. r6 f+ v# `

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

) b+ I8 u* p, B5 O5 |8 V1 s7 W

Long, ByVal hPrinter As Long) As Long

2 I1 W! I" Q& [0 @1 _

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

7 l& q0 p) {# m4 g

Long) As Long

6 L# h6 ]: f4 g

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

% @2 u* ~6 ^3 I3 z# @

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

$ p7 ^3 s# f6 c+ d6 {

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

- V) K2 i) s7 ]$ T& G

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

. K, e& b" q6 W, [4 d, J( X

Long, pcbNeeded As Long) As Long

" E& s1 E& U8 u9 a$ x5 l4 q

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

6 Y9 s* A# U$ M2 h

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

% W9 v9 Q/ K$ V% t4 R

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

8 ?, k! k* u( x5 | _. G2 V

ring As Long) As Long

5 o- d& ~8 ?( j1 C2 `7 L+ U y

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

$ ~! I- a% `* \. m$ I; t' y

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

& L: G S2 M% q

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

9 i$ C& A- A; Y* T( l+ N

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

) D9 F0 v* n4 v

'pDeviceName是打印机名

, ]8 i, H7 z6 I) q1 t6 l6 `

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

% h$ X& b& z7 k" f- [% P! o5 r

Private Sub GetPrint(pDeviceName, pType As String)

3 j6 Q4 W1 W1 M, j: }7 f

Dim pIn As PRINTER_INFO_1

b2 R4 n0 w5 K" t5 w4 \5 T# r! m+ J

Dim s As String * 256

. `* _0 k9 `+ W2 M

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

0 C: x8 g8 J* r6 F% { ]

On Error Resume Next

; J+ h0 d; A$ S: H% d1 u) U

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

4 f7 ~% Z( o! f# X' ?

If r = 0 Then Exit Sub

- _4 B: M% F% x$ A6 C

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

1 M; U* u( L7 O1 |

ReDim pPrinter(r1) As Byte

: H7 P/ v3 i* d2 o

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

. T {5 W w3 z: T* h; C1 N

If r = 0 Then Exit Sub

; C9 t/ W# e) V2 Y! |0 t/ S+ `

r = ClosePrinter(phPrinter)

* R: A; u! |" [- Z7 m, n$ W) R) L& X

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

! t( F) ?3 d# \, C% J% I5 @ * K" G9 l# f( G8 h+ }. w8 l. }4 H

r1 = lstrlen(pIn.pDescription)

+ k, ]; j+ x' W' Y: Q# W

r = lstrcpy(s, pIn.pDescription)

9 a6 S k: `/ s0 x3 q, ` T; G

If r = 0 Then Exit Sub

! _3 r. s! S4 C0 ?7 w- H

pType = Left(s, r1)

* C! H$ M4 }) t1 |& P0 x+ P4 K; _6 L

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

( o$ {) \. R. {

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

3 g# \7 w; b) f. r* v

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

( F5 h- H' g8 b1 b' E. S7 A% q; U

End Sub

' @) Y: u8 d5 a5 U; ?5 S

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-10-12 01:16 , Processed in 0.750309 second(s), 52 queries .

回顶部