VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1034|回复: 6

求教OpenPrinter2函数

[复制链接]

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-5 20:00:01 | 显示全部楼层 |阅读模式
为了获取指定打印机的句柄, 用以下语句:

Dim pd              As PRINTER_DEFAULTS
Dim PrinterHandle   As Long
Dim Result          As Long
Dim PrinterName     As String
    pd.pDataType = vbNullString
    pd.pDevMode = 0&
    pd.DesiredAccess = PRINTER_ALL_ACCESS
    PrinterName="Canno S220SP"
    Result = OpenPrinter2(PrinterName, PrinterHandle, pd)

对于本地打印机名:
PrinterName="Canno S220SP"
执行是成功的,

但是把这个打印机共享了, 在另一台机器上通过网络打印机名:
PrinterName="\\A003\Canno S220SP"
来获取PrinterHandle, 却是怎么也不行!

请教大侠, 如何用OpenPrinter2获取网络上打印机的PrinterHandle?
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-3-5 10:15:01 | 显示全部楼层
PrinterName="\\A003\Canno S220SP"

    If OpenPrinter(PrinterName, hPrinter, 0&) <> 0 Then
hPrinter就是你要的东东

Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-8-12 22:15:01 | 显示全部楼层
楼上大侠误解了, OpenPrinter没问题, 我现在是用OpenPrinter2 有问题
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-8-14 16:45:01 | 显示全部楼层
楼主哥哥,OpenPrinter2这个函数是哪个库里的?
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-8-19 14:15:01 | 显示全部楼层
rajah1982 弟弟:

OpenPrinter 和 OpenPrinter2 的定义如下

Private Declare Function OpenPrinter2 Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-8-24 22:30:01 | 显示全部楼层
有人在吗?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-28 09:30:01 | 显示全部楼层
我使用 OpenPrinter 得到 的handle 用 GetPrinter打开后,在 PRINTER_INFO_2 结构中的status成员找不到"无法连接"这个错误代码状态 可是windows 2003 自己能够判断 在 [打印机和传真] 列表中 如果一个网络打印机 由于网络连不通 在[状态]一栏 会显示"无法连接" 不知道 windows怎么做到的.
我猜想 可能使用OpenPrinter2这个未公开的API,用了其中的PRINTER_OPTIONS参数 获得了一个远程的handle 因为 在msdn中对PRINTER_OPTIONS 有以下可选择项

The PRINTER_OPTION_FLAGS enumeration is used to specify the caching of a handle for a printer opened with OpenPrinter2.

typedef enum
{
  PRINTER_OPTION_NO_CACHE,
  PRINTER_OPTION_CACHE,
  PRINTER_OPTION_CLIENT_CHANGE
} PRINTER_OPTION_FLAGS;

PRINTER_OPTION_NO_CACHE
The handle is not cached. All functions applied to a handle returned by OpenPrinter2 will go to the remote computer.
PRINTER_OPTION_CACHE
The handle is cached. All functions applied to a handle returned by OpenPrinter2 will go to the local cache.
PRINTER_OPTION_CLIENT_CHANGE
The handle returned by OpenPrinter2 can be used by SetPrinter to rename the printer connection.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表