FindFirstPrinterChangeNotification

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

FindFirstPrinterChangeNotification函数创建一个更改通知对象并返回对象的句柄。然后,您可以在调用其中一个等待功能来监视打印机或打印服务器的更改时使用此句柄。

FindFirstPrinterChangeNotification调用指定要监视的更改类型。您可以指定一组条件来监视更改,一组要监视的打印机信息字段或两者。

当指定的打印机或打印服务器中发生指定的更改之一时,更改通知句柄上的等待操作将成功。然后调用FindNextPrinterChangeNotification函数来检索有关更改的信息,并重置更改通知对象以供下次等待操作使用。

HANDLE FindFirstPrinterChangeNotification(

HANDLE 【hPrinter】,//处理打印机或打印服务器以监控更改
DWORD 【The system sets one or more of the following bit flags:】,//指定要监视条件的标志
DWORD 【// pointer to structure specifying printer information to monitor】,//保留,必须为零
LPVOID 【pPrinterNotifyOptions】//指向结构的指针,指定要监视的打印机信息
); 

参数

【hPrinter】

处理到要监视的打印机或打印服务器。该句柄通过调用OpenPrinter函数获取。

【The system sets one or more of the following bit flags:】

一组位标志,指定将导致更改通知对象进入信号状态的条件。当满足一个或多个指定条件时,发生更改通知。如果【pPrinterNotifyOptions】非NULL,则【The system sets one or more of the following bit flags:】参数可以为零。

您可以设置以下一个或多个更改通知常量:

含义
PRINTER_CHANGE_FORM 
 通知表单的任何更改。您可以设置此常规标志或一个或多个以下特定标志:
PRINTER_CHANGE_ADD_FORM PRINTER_CHANGE_SET_FORM PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB 
 通知任何工作变更。您可以设置此常规标志或一个或多个以下特定标志:
PRINTER_CHANGE_ADD_JOB PRINTER_CHANGE_SET_JOB PRINTER_CHANGE_DELETE_JOB PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT 
 通知端口的任何更改。您可以设置此常规标志或一个或多个以下特定标志:
PRINTER_CHANGE_ADD_PORT PRINTER_CHANGE_CONFIGURE_PORT PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR 
 通知打印处理器的任何更改。您可以设置此通用标志或一个或多个以下特定标志:PRINTER_CHANGE_ADD_PRINT_PROCESSOR PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER 
 通知打印机的任何更改。您可以设置此常规标志或一个或多个以下特定标志:
PRINTER_CHANGE_ADD_PRINTER PRINTER_CHANGE_SET_PRINTER PRINTER_CHANGE_DELETE_PRINTER PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER 
 通知打印机驱动程序的任何更改。您可以设置此常规标志或一个或多个以下特定标志:
PRINTER_CHANGE_ADD_PRINTER_DRIVER PRINTER_CHANGE_SET_PRINTER_DRIVER PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL 
 如果发生任何上述更改,请通知。

有关上表中更具体的标志的描述,请参阅FindNextPrinterChangeNotification功能。

【// pointer to structure specifying printer information to monitor】

Reserved; must be zero.

【pPrinterNotifyOptions】

指向PRINTER_NOTIFY_OPTIONS结构。此结构的A change notification occurs when one or more of the specified fields changes.成员指向一个或多个PRINTER_NOTIFY_OPTIONS_TYPE结构的数组,每个结构指定要监视的打印机信息字段。当一个或多个指定的字段发生更改时,发生更改通知。发生更改时,FindNextPrinterChangeNotification功能可以检索新的打印机信息。如果【The system sets one or more of the following bit flags:】非零,则此参数可以为NULL。

有关可以监视的字段的列表,请参阅PRINTER_NOTIFY_OPTIONS_TYPE.

返回值

如果函数成功,则返回值是与指定的打印机或打印服务器关联的更改通知对象的句柄。

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

备注

要监视打印机或打印服务器,请调用FindFirstPrinterChangeNotification功能,然后在调用等待功能之一时使用返回的更改通知对象句柄。更改通知对象的等待操作在更改时将被满足通知对象进入信号状态。当受监视的打印机或打印服务器中出现【The system sets one or more of the following bit flags:】【pPrinterNotifyOptions】指定的一个或多个更改时,系统将通知该对象。

当您致电FindFirstPrinterChangeNotification时,【The system sets one or more of the following bit flags:】必须为非零,否则【pPrinterNotifyOptions】必须为非空。如果同时指定了两者,则会同时发出通知。

当打印机上的等待操作更改通知对象时,请调用FindNextPrinterChangeNotification功能确定通知的原因。对于【The system sets one or more of the following bit flags:】指定的条件,FindNextPrinterChangeNotification报告更改的条件或条件。对于【pPrinterNotifyOptions】指定的打印机信息字段,FindNextPrinterChangeNotification报告更改的字段或字段以及这些字段的新信息。FindNextPrinterChangeNotification还将更改通知对象重置为非信号状态,以便您可以在另一个等待操作中使用它来继续监视打印机或打印服务器。

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

当您不再需要更改通知对象时,通过调用FindClosePrinterChangeNotification功能将其关闭。

三个Find*PrinterChangeNotification功能与等待功能相结合,为WaitForPrinterChange功能提供了异步和资源有效的替代方案。

也可以看看

FindClosePrinterChangeNotification, FindNextPrinterChangeNotification, OpenPrinter, PRINTER_NOTIFY_OPTIONS, PRINTER_NOTIFY_OPTIONS_TYPE, WaitForPrinterChange