描述
OpenPrinter功能检索打印子系统中指定的打印机或打印服务器或其他类型的手柄的句柄。
C++ 语法
BOOL OpenPrinter( __in LPTSTR pPrinterName, __out LPHANDLE phPrinter, __in LPPRINTER_DEFAULTS pDefault ); |
PowerBASIC 语法
FUNCTION OpenPrinterA ( _ BYREF pPrinterName AS ASCIIZ, _ BYREF phPrinter AS DWORD, _ BYREF pDefault AS PRINTER_DEFAULTSA _ ) AS LONG |
Unicode版本:
FUNCTION OpenPrinterW ( _ BYREF pPrinterName AS WSTRINGZ, _ BYREF phPrinter AS DWORD, _ BYREF pDefault AS PRINTER_DEFAULTSW _ ) AS LONG |
参数
pPrinterName
[in]指向指定打印机或打印服务器,打印机对象,XcvMonitor或XcvPort的名称的以null结尾的字符串的指针。
对于打印机对象,请使用:PrinterName,Job xxxx。对于XcvMonitor,请使用:ServerName,XcvMonitor MonitorName。对于XcvPort,请使用:ServerName,XcvPort PortName。
Windows NT / 2000 / XP / Vista / Windows 7:如果为空,则表示本地打印机服务器。
phPrinter
[out]指向接收到打开的打印机或打印服务器对象的句柄(而不是线程安全)的变量的指针。
Windows 2000 / XP / Vista / Windows 7:phPrinter参数可以返回与XcvData功能一起使用的Xcv句柄。有关XcvData的更多信息,请参阅Microsoft Windows2000驱动程序开发工具包。
pDefault
[in]指向PRINTER_DEFAULTS结构的指针。该值可以为NULL。
返回值
如果函数成功,则返回值为非零值。
如果函数失败,返回值为零。
备注
不要在DllMain中调用此方法。
phPrinter指向的句柄不是线程安全的。如果呼叫者需要在多个线程上同时使用,则它们必须通过Win32同步功能提供对打印机句柄的自定义同步访问。为避免编写自定义代码,应用程序可以根据需要打开每个线程上的打印机句柄。
pDefault参数使您能够指定用于打印由StartDocPrinter函数提交的文档的数据类型和设备模式值。但是,您可以在文档启动后使用SetJob函数覆盖这些值。
当StartPrintDocpDocInfo参数DOC_INFO_1pDatatype为“RAW”时,pDefault参数PRINTER_DEFAULTS结构中定义的DEVMODE设置不会使用。当将高级文档(如Adobe PDF或Microsoft Word文件)或其他打印机数据(如PCL,PS或HPGL)直接发送到设置为“RAW”的pDatatype的打印机时,文档必须完全描述DEVMODE以硬件所理解的语言打印作业设置。
您可以调用OpenPrinter功能打开打印服务器的句柄,或确定客户端对打印服务器的访问权限。为此,请在pPrinterName参数中指定打印服务器的名称,将PRINTER_DEFAULTS结构的pDatatype和pDevMode成员设置为NULL,并设置DesiredAccess成员以指定服务器访问掩码值作为SERVER_ALL_ACCESS。完成句柄后,将其传递给ClosePrinter函数以关闭它。
Windows 95/98 / Me:OpenPrinter忽略了PRINTER_DEFAULTS的DesiredAccess成员。
Windows NT / 2000 / XP / Vista / Windows 7:使用PRINTER_DEFAULTS结构的DesiredAccess成员来指定打印机所需的访问权限。访问权限可以是以下之一。(如果pDefault为NULL,则访问权限为PRINTER_ACCESS_USE。)
所需访问值 |
含义 |
PRINTER_ACCESS_ADMINISTER |
执行管理任务,例如由SetPrinter提供的任务。 |
PRINTER_ACCESS_USE |
执行基本打印操作。 |
PRINTER_ALL_ACCESS |
执行除SYNCHRONIZE以外的所有管理任务和基本打印操作。 |
通用安全性值,如WRITE_DAC |
允许特定的控制访问权限。 |
如果用户没有权限打开具有所需访问权限的指定打印机或打印服务器,则OpenPrinter调用将失败,返回值为零,GetLastError将返回值ERROR_ACCESS_DENIED。
Windows 95/98 / Me:Microsoft Layer for Unicode支持OpenPrinterW.
引用文件 #INCLUDE Once
WinSpool.inc(包括Windows.inc)