描述
FindFirstPrinterChangeNotification函数创建一个更改通知对象并返回该对象的句柄。然后,您可以在调用其中一个等待功能来监视打印机或打印服务器的更改时使用此句柄。
FindFirstPrinterChangeNotification调用指定要监视的更改类型。您可以指定一组条件来监视更改,一组要监视的打印机信息字段或两者。
当指定的打印机或打印服务器中发生指定的更改之一时,更改通知句柄上的等待操作将成功。然后调用FindNextPrinterChangeNotification函数来检索有关更改的信息,并重置更改通知对象以供下次等待操作使用。
C++ 语法
HANDLE FindFirstPrinterChangeNotification( __in HANDLE hPrinter, __in DWORD fdwFlags, __in DWORD fdwOptions, __in LPVOID pPrinterNotifyOptions ); |
PowerBASIC 语法
FUNCTION FindFirstPrinterChangeNotification ( _ BYVAL hPrinter AS DWORD, _ BYVAL fdwFlags AS DWORD, _ BYVAL fdwOptions AS DWORD, _ BYREF pPrinterNotifyOptions AS ANY _ ) AS DWORD |
参数
hPrinter
[in]处理要监视的打印机或打印服务器。使用OpenPrinter或AddPrinter功能来检索打印机句柄。
fdwFlags
[in]指定将导致更改通知对象进入信号状态的条件。当满足一个或多个指定条件时,发生更改通知。如果pPrinterNotifyOptions非NULL,则fdwFlags参数可以为零。
此参数可以是以下值中的一个或多个。
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功能。
fdwOptions
[in]保留;必须为零。
pPrinterNotifyOptions
[in]指向PRINTER_NOTIFY_OPTIONS结构的指针。此结构的pTypes成员是一个或多个PRINTER_NOTIFY_OPTIONS_TYPE结构的数组,每个结构都指定要监视的打印机信息字段。当一个或多个指定的字段发生更改时,发生更改通知。发生更改时,FindNextPrinterChangeNotification功能可以检索新的打印机信息。如果fdwFlags非零,此参数可以为NULL。
有关可以监视的字段的列表,请参阅PRINTER_NOTIFY_OPTIONS_TYPE.
返回值
如果函数成功,则返回值是与指定的打印机或打印服务器关联的更改通知对象的句柄。
如果函数失败,返回值为INVALID_HANDLE_VALUE。
备注
要监视打印机或打印服务器,请调用FindFirstPrinterChangeNotification功能,然后在调用其中一个等待功能时使用返回的更改通知对象句柄。当变更通知对象进入信号状态时,满足更改通知对象的等待操作。当受监视的打印机或打印服务器中发生由fdwFlags或pPrinterNotifyOptions指定的一个或多个更改时,系统将通知该对象。
当您致电FindFirstPrinterChangeNotification时,fdwFlags必须为非零,否则pPrinterNotifyOptions必须为非空。如果同时指定了两者,则会同时发出通知。
当打印机上的等待操作更改通知对象时,调用FindNextPrinterChangeNotification函数来确定通知的原因。对于由fdwFlags指定的条件,FindNextPrinterChangeNotification报告更改的条件或条件。对于pPrinterNotifyOptions指定的打印机信息字段,FindNextPrinterChangeNotification报告更改的字段或字段以及这些字段的新信息。FindNextPrinterChangeNotification还将更改通知对象重置为非信号状态,以便您可以在另一个等待操作中使用它来继续监视打印机或打印服务器。
除了一个例外,如果更改通知对象不处于信号状态,则不要调用FindNextPrinterChangeNotification函数。如果wait函数返回值WAIT_TIMEOUT,则更改对象不处于信号状态。只有等待功能没有超时才能成功,才调用FindNextPrinterChangeNotification功能。FindNextPrinterChangeNotification在pPrinterNotifyOptions参数中设置的PRINTER_NOTIFY_OPTIONS_REFRESH位调用时,例外情况。
当您不再需要更改通知对象时,通过调用FindClosePrinterChangeNotification函数关闭它。
FindFirstPrinterChangeNotification的来电者必须确保传送到FindFirstPrinterChangeNotification的打印机句柄在FindClosePrinterChangeNotification被调用之前仍然有效。如果打印机手柄在打印机更改通知手柄之前关闭,则进一步的通知将无法传送。
Windows XP SP2 / Vista:默认情况下,Internet连接防火墙(ICF)阻止打印机端口,但可以启用文件和打印共享的例外。如果用户将打印机连接到另一台机器,并且未启用该异常,则用户将不会从服务器接收打印机更改通知。机器管理员将必须启用异常。
引用文件 #INCLUDE Once
WinSpool.inc(包括Windows.inc)