SetPrinter功能通过暂停打印,恢复打印或清除所有打印作业来设置指定打印机的状态。该函数也可用于设置打印机数据。
BOOL SetPrinter(
HANDLE 【hPrinter】, | //打印机对象的句柄 |
DWORD 【水平】, | //结构级别 |
LPBYTE 【pPrinter】, | //包含打印机数据的数组地址 |
DWORD 【命令】 | //打印机状态命令 |
); |
参数
【hPrinter】
处理感兴趣的打印机
【水平】
Windows 95:指定【pPrinter】中包含的数据类型。该参数必须为0,2,3,4或5。如果【命令】不等于零,则此参数必须为零。
Windows NT:指定【pPrinter。】中包含的数据类型。此参数必须为0,2,3,5或6。如果【命令】不等于零,则此参数必须为零。
【pPrinter】
这是指示打印机状态的DWORD值,或指向可能包含打印机数据的字节数组的指针。
如果【水平】为0,并且【命令】参数为PRINTER_CONTROL_SET_STATUS,则【pPrinter】必须包含指定要设置的新打印机状态的DWORD值。有关可能状态值的列表,请参阅PRINTER_INFO_2结构的状态成员。请注意,PRINTER_STATUS_PAUSED和PRINTER_STATUS_PENDING_DELETION不是要设置的有效状态值。
如果【水平】为0,但【命令】参数不是PRINTER_CONTROL_SET_STATUS,则【pPrinter】必须为NULL。
Windows 95:如果【水平】为2,3,4或5,则【pPrinter】分别指向包含PRINTER_INFO_2,PRINTER_INFO_3,PRINTER_INFO_4或PRINTER_INFO_5结构的数组。
Windows NT:如果【水平】为2,3,5或6,则【pPrinter】分别指向包含PRINTER_INFO_2,PRINTER_INFO_3,PRINTER_INFO_5或PRINTER_INFO_6结构的数组。
【命令】
此参数可以为零或以下值之一。如果为零,打印机将保留其原始状态,并使用【pPrinter】指向的结构重新配置打印机数据。
值 | 含义 |
PRINTER_CONTROL_PAUSE | 暂停打印机。 |
PRINTER_CONTROL_PURGE | 删除打印机中的所有打印作业。 |
PRINTER_CONTROL_RESUME | 恢复暂停的打印机。 |
PRINTER_CONTROL_SET_STATUS | 设置打印机状态。 |
如果【命令】是以上任何值,则【水平】必须为零。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
您可以通过调用OpenPrinter函数来获取句柄【hPrinter】.
要修改当前打印机设置,应用程序应调用GetPrinter将当前设置检索到PRINTER_INFO_2结构中,根据需要修改该结构的成员,然后调用SetPrinter功能。
SetPrinter函数忽略PRINTER_INFO_2结构的以下成员:
pServerName,AveragePPM,状态和cJobs
暂停打印机将暂停对该打印机的所有打印作业的计划,但可能正在打印的打印作业除外。打印作业可以提交到一个已暂停的打印机,但是没有任何作业将被安排在该打印机上打印,直到打印恢复为止。如果打印机被清除,则除了当前打印作业之外,该打印机的所有打印作业将被删除。
如果打印机数据结构包含指向安全描述符的指针,则只有存在呼叫者有权写入的安全描述符的那些组件。要写入特定安全描述符组件的应用程序必须以足够的访问权限打开打印机才能修改这些组件。下表显示了可以针对特定访问权限值修改的安全描述符组件:
访问权限 | 可修改的安全描述符组件 |
WRITE_OWNER | 所有者,主要proupel-Latn |
WRITE_DAC | 自由访问控制列表(ACL) |
ACCESS_SYSTEM_SECURITY | 系统ACL |
如果呼叫应用程序缺少必需的权限,SetPrinter将失败。应用程序不希望修改的安全描述符的那些组件应适当为NULL或不存在。如果您不想修改安全描述符,并且使用PRINTER_INFO_2结构调用SetPrinter,则将该结构的pSecurityDescriptor成员设置为NULL。
Windows 95: SetPrinter不更新PRINTER_INFO_2结构中的pShareName成员。
当使用打印机的UNC名称从Windows 95机器对Windows NT打印机进行调用时,不支持Windows 95中:SetPrinter.
也可以看看
AddPrinter, GetPrinter, OpenPrinter, PRINTER_INFO_2, PRINTER_INFO_3, PRINTER_INFO_4, PRINTER_INFO_5, PRINTER_INFO_6