Compartir a través de


Función FindFirstPrinterChangeNotification

La función FindFirstPrinterChangeNotification crea un objeto de notificación de cambio y devuelve un identificador al objeto . Después, puede usar este identificador en una llamada a una de las funciones de espera para supervisar los cambios en la impresora o el servidor de impresión.

La llamada FindFirstPrinterChangeNotification especifica el tipo de cambios que se van a supervisar. Puede especificar un conjunto de condiciones para supervisar los cambios, un conjunto de campos de información de impresora que se van a supervisar o ambos.

Una operación de espera en el identificador de notificación de cambio se realiza correctamente cuando se produce uno de los cambios especificados en la impresora o el servidor de impresión especificados. A continuación, llame a la función FindNextPrinterChangeNotification para recuperar información sobre el cambio y restablecer el objeto de notificación de cambios para su uso en la siguiente operación de espera.

Sintaxis

HANDLE FindFirstPrinterChangeNotification(
  _In_     HANDLE hPrinter,
           DWORD  fdwFilter,
           DWORD  fdwOptions,
  _In_opt_ LPVOID pPrinterNotifyOptions
);

Parámetros

hPrinter [in]

Identificador de la impresora o del servidor de impresión que desea supervisar. Use la función OpenPrinter o AddPrinter para recuperar un identificador de impresora.

fdwFilter

Las condiciones que harán que el objeto de notificación de cambio entre en un estado señalado. Se produce una notificación de cambio cuando se cumplen una o varias de las condiciones especificadas. El parámetro fdwFilter puede ser cero si pPrinterNotifyOptions no es NULL.

Este parámetro puede ser uno o más de los siguientes valores.

Value Significado
PRINTER_CHANGE_FORM
Notifique los cambios realizados en un formulario. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_FORM
PRINTER_CHANGE_SET_FORM
PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB
Notifique los cambios realizados en un trabajo. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_JOB
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT
Notifique los cambios en un puerto. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PORT
PRINTER_CHANGE_CONFIGURE_PORT
PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR
Notifique los cambios realizados en un procesador de impresión. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER
Notifique los cambios realizados en una impresora. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINTER
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_DELETE_PRINTER
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER
Notifique los cambios realizados en un controlador de impresora. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINTER_DRIVER
PRINTER_CHANGE_SET_PRINTER_DRIVER
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL
Notifique si se produce alguno de los cambios anteriores.
PRINTER_CHANGE_SERVER
Windows 7: notificar cualquier cambio en el servidor.
Esta marca no se incluye en los cambios supervisados estableciendo el valor PRINTER_CHANGE_ALL .

Para obtener descripciones de las marcas más específicas de la tabla anterior, vea la función FindNextPrinterChangeNotification .

fdwOptions

Marca que determina la categoría de impresoras para las que funcionarán las notificaciones.

Valor Significado
PRINTER_NOTIFY_CATEGORY_ALL
0x001000
FindNextPrinterChangeNotification devuelve notificaciones para impresoras 2D y 3D.
PRINTER_NOTIFY_CATEGORY_3D
0x002000
FindNextPrinterChangeNotification solo devuelve notificaciones para impresoras 3D.

Cuando esta marca se establece en cero (0), FindFirstPrinterChangeNotification solo funcionará para impresoras 2D. Este es el valor predeterminado.

pPrinterNotifyOptions [in, opcional]

Puntero a una estructura de PRINTER_NOTIFY_OPTIONS . El miembro pTypes de esta estructura es una matriz de una o varias estructuras PRINTER_NOTIFY_OPTIONS_TYPE , cada una de las cuales especifica un campo de información de impresora que se va a supervisar. Se produce una notificación de cambio cuando uno o varios de los campos especificados cambian. Cuando se produce un cambio, la función FindNextPrinterChangeNotification puede recuperar la nueva información de la impresora. Este parámetro puede ser NULL si fdwFilter es distinto de cero.

Para obtener una lista de los campos que se pueden supervisar, consulte PRINTER_NOTIFY_OPTIONS_TYPE.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es un identificador de un objeto de notificación de cambio asociado a la impresora o el servidor de impresión especificados.

Si se produce un error en la función, el valor devuelto es INVALID_HANDLE_VALUE.

Comentarios

Nota:

Se trata de una función de bloqueo o sincrónica y podría no devolverse inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y los factores de implementación de controladores de impresora que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.

Para supervisar una impresora o un servidor de impresión, llame a la función FindFirstPrinterChangeNotification y, a continuación, use el identificador de objeto de notificación de cambio devuelto en una llamada a una de las funciones de espera. Se cumple una operación de espera en un objeto de notificación de cambio cuando el objeto de notificación de cambio entra en el estado señalado. El sistema indica al objeto cuando se producen uno o varios de los cambios especificados por fdwFilter o pPrinterNotifyOptions en la impresora supervisada o en el servidor de impresión.

Cuando se llama a FindFirstPrinterChangeNotification, fdwFilter debe ser distinto de cero o pPrinterNotifyOptions debe ser distinto de NULL. Si se especifican ambos, se producirán notificaciones para ambos.

Cuando se cumpla una operación de espera en un objeto de notificación de cambio de impresora, llame a la función FindNextPrinterChangeNotification para determinar la causa de la notificación. Para una condición especificada por fdwFilter, FindNextPrinterChangeNotification notifica la condición o las condiciones que cambiaron. Para un campo de información de impresora especificado por pPrinterNotifyOptions, FindNextPrinterChangeNotification notifica el campo o los campos que han cambiado, así como la nueva información de estos campos. FindNextPrinterChangeNotification también restablece el objeto de notificación de cambio al estado no asignado para que pueda usarlo en otra operación de espera para continuar supervisando la impresora o el servidor de impresión.

Con una excepción, no llame a la función FindNextPrinterChangeNotification si el objeto de notificación de cambio no está en el estado señalado. Si la función wait devuelve el valor WAIT_TIMEOUT, el objeto de cambio no está en el estado señalado. Llame a la función FindNextPrinterChangeNotification solo si la función de espera se realiza correctamente sin tiempo de espera. La excepción es cuando se llama a FindNextPrinterChangeNotification con el bit PRINTER_NOTIFY_OPTIONS_REFRESH establecido en el parámetro pPrinterNotifyOptions .

Cuando ya no necesite el objeto de notificación de cambio, ciérrelo llamando a la función FindClosePrinterChangeNotification .

Los autores de llamadas de FindFirstPrinterChangeNotification deben asegurarse de que el identificador de impresora pasado a FindFirstPrinterChangeNotification sigue siendo válido hasta que se llame a FindClosePrinterChangeNotification . Si el controlador de impresora se cierra antes de que se cierre el identificador de notificación de cambio de impresora, no se entregarán más notificaciones.

FindFirstPrinterChangeNotification no enviará notificaciones de cambios para impresoras 3D a identificadores de servidor.

Nota:

En Windows XP con Service Pack 2 (SP2) y versiones posteriores, el Firewall de conexión a Internet (ICF) bloquea los puertos de impresora de forma predeterminada, pero se puede habilitar una excepción para compartir archivos e impresión. Si un usuario realiza una conexión de impresora a otro equipo y la excepción no está habilitada, el usuario no recibirá notificaciones de cambio de impresora del servidor. Un administrador de máquina tendrá que habilitar la excepción.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winspool.h (incluye Windows.h)
Biblioteca
Winspool.lib
Archivo DLL
Spoolss.dll

Consulte también

Impresión

Funciones de la API del administrador de trabajos de impresión

FindClosePrinterChangeNotification

FindNextPrinterChangeNotification

OpenPrinter

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_OPTIONS_TYPE