FindNextPrinterChangeNotification

【勇芳软件工作室】汉化HomePreviousNext

FindNextPrinterChangeNotification功能检索有关与打印机或打印服务器关联的更改通知对象的最新更改通知的信息。当对更改通知对象进行等待操作时,调用此函数。

该函数还将更改通知对象重置为未通知状态。然后,您可以在另一个等待操作中使用该对象来继续监视打印机或打印服务器。下一次打印机或打印服务器发生一组特定更改时,操作系统将将对象设置为信号状态。FindFirstPrinterChangeNotification函数创建更改通知对象,并指定要监视的更改集。

BOOL FindNextPrinterChangeNotification(

HANDLE 【H更改】,//处理更改感兴趣的通知对象
PDWORD 【// pointer to a value that indicates the condition that changed】,//指向指示更改条件的值的指针
LPVOID 【pPrinterNotifyOptions】,//指向指定刷新标志的结构的指针
LPVOID 【*ppPrinterNotifyInfo】//指向接收打印机信息缓冲区的指针的指针
); 

参数

【H更改】

处理与打印机或打印服务器关联的更改通知对象。通过调用FindFirstPrinterChangeNotification函数获得这样的句柄。当操作系统检测到对象的更改通知过滤器中指定的更改之一时,操作系统将此更改通知对象设置为已通知状态。

【// pointer to a value that indicates the condition that changed】

指向双字变量的指针,其位设置为指示发生的更改以导致最近的通知。可能设置的位标志对应于FindFirstPrinterChangeNotification调用的【The system sets one or more of the following bit flags:】参数中指定的位标志。系统设置以下一个或多个位标志:

含义
PRINTER_CHANGE_ADD_FORM 
 一个表单被添加到服务器。
PRINTER_CHANGE_ADD_JOB 
 已将打印作业发送到打印机。
PRINTER_CHANGE_ADD_PORT 
 端口或监视器已添加到服务器。
PRINTER_CHANGE_ADD_PRINT_PROCESSOR 
 打印处理器已添加到服务器。
PRINTER_CHANGE_ADD_PRINTER 
 打印机已添加到服务器。
PRINTER_CHANGE_ADD_PRINTER_DRIVER 
 打印机驱动程序已添加到服务器。
PRINTER_CHANGE_CONFIGURE_PORT 
 在服务器上配置了一个端口。
PRINTER_CHANGE_DELETE_FORM 
 表单从服务器中删除。
PRINTER_CHANGE_DELETE_JOB 
 工作被删除。
PRINTER_CHANGE_DELETE_PORT 
 端口或监视器已从服务器中删除。
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 
 打印处理器已从服务器中删除。
PRINTER_CHANGE_DELETE_PRINTER 
 打印机被删除。
PRINTER_CHANGE_DELETE_PRINTER_DRIVER 
 打印机驱动程序已从服务器中删除。
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 
 打印机连接失败。
PRINTER_CHANGE_SET_FORM 
 在服务器上设置了一个表单。
PRINTER_CHANGE_SET_JOB 
 工作被设定了
PRINTER_CHANGE_SET_PRINTER 
 打印机设置好了
PRINTER_CHANGE_SET_PRINTER_DRIVER 
 打印机驱动程序已设置。
PRINTER_CHANGE_WRITE_JOB 
 工作数据已写入。

【pPrinterNotifyOptions】

指向PRINTER_NOTIFY_OPTIONS结构。将此结构的成员设置为PRINTER_NOTIFY_OPTIONS_REFRESH,以使该函数返回所有受监视的打印机信息字段的当前数据。该函数忽略结构的所有其他成员。此参数可以为NULL。

【ppPrinterNotifyInfo】

指向一个指针变量的指针,该变量接收系统分配的只读缓冲区的地址。调用FreePrinterNotifyInfo函数来完成缓冲区的释放。如果不需要信息,此参数可以为NULL。

缓冲区包含PRINTER_NOTIFY_INFO结构,其中包含PRINTER_NOTIFY_INFO_DATA结构的数组。阵列的每个元素都包含有关FindFirstPrinterChangeNotification调用的【pPrinterNotifyOptions】参数中指定的一个字段的信息。通常,该函数仅为更改为导致最新通知的字段提供数据。但是,如果【pPrinterNotifyOptions】参数指向的结构指定了PRINTER_NOTIFY_OPTIONS_REFRESH,则该函数为所有受监视的字段提供数据。

如果在PRINTER_NOTIFY_INFO结构的成员中设置了PRINTER_NOTIFY_INFO_DISCARDED位,则会发生溢出或错误,通知可能已丢失。在这种情况下,在您进行第二次指定PRINTER_NOTIFY_OPTIONS_REFRESH的FindNextPrinterChangeNotification呼叫之前,不会再发送其他通知。

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.

备注

FindFirstPrinterChangeNotification创建的通知对象进行等待操作后,调用FindNextPrinterChangeNotification函数。调用FindNextPrinterChangeNotification可以获取有关满足等待操作的更改的信息,并重置通知对象,以便在发生下一次更改时发出信号。

如果更改通知对象未处于信号状态,请勿调用FindNextPrinterChangeNotification功能。如果wait函数返回值WAIT_TIMEOUT,则更改对象不处于信号状态。只有等待功能在没有超时的情况下成功,才调用FindNextPrinterChangeNotification功能。

要继续监视打印机或打印服务器进行更改,请重复调用等待功能之一的循环,然后调用FindNextPrinterChangeNotification功能检查更改并重置通知对象。

FindNextPrinterChangeNotification可以将同一打印机信息字段的多个更改合并到单个通知中。发生这种情况时,该函数通常会将【ppPrinterNotifyInfo】中的PRINTER_NOTIFY_INFO_DATA结构数组中的字段的所有更改压缩为单个条目;单个条目仅报告最新信息。但是,对于某些作业和打印机信息字段,该函数可以返回同一字段的多个数组条目。在这种情况下,该字段的最后一个数组条目报告当前数据,较早的条目包含中间阶段的数据。

当您不再需要更改通知对象时,通过调用FindClosePrinterChangeNotification函数关闭它。

等待功能相结合的三个Find*PrinterChangeNotification功能为WaitForPrinterChange功能提供了一种异步的,更具资源效率的替代方案。

也可以看看

FindClosePrinterChangeNotification, FindFirstPrinterChangeNotification, PRINTER_NOTIFY_INFO, PRINTER_NOTIFY_INFO_DATA, PRINTER_NOTIFY_OPTIONS, WaitForPrinterChange