Compartilhar via


Função FindFirstPrinterChangeNotification

A função FindFirstPrinterChangeNotification cria um objeto de notificação de alteração e retorna um identificador para o objeto . Em seguida, você pode usar esse identificador em uma chamada para uma das funções de espera para monitorar as alterações na impressora ou no servidor de impressão.

A chamada FindFirstPrinterChangeNotification especifica o tipo de alterações a serem monitoradas. Você pode especificar um conjunto de condições para monitorar alterações, um conjunto de campos de informações da impressora a serem monitorados ou ambos.

Uma operação de espera no identificador de notificação de alteração é bem-sucedida quando ocorre uma das alterações especificadas na impressora ou no servidor de impressão especificado. Em seguida, chame a função FindNextPrinterChangeNotification para recuperar informações sobre a alteração e redefinir o objeto de notificação de alteração para uso na próxima operação de espera.

Sintaxe

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

Parâmetros

hPrinter [in]

Um identificador para a impressora ou servidor de impressão que você deseja monitorar. Use a função OpenPrinter ou AddPrinter para recuperar um identificador de impressora.

fdwFilter

As condições que farão com que o objeto de notificação de alteração insira um estado sinalizado. Uma notificação de alteração ocorre quando uma ou mais das condições especificadas são atendidas. O parâmetro fdwFilter poderá ser zero se pPrinterNotifyOptions não for NULL.

Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
PRINTER_CHANGE_FORM
Notifique as alterações em um formulário. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_FORM
PRINTER_CHANGE_SET_FORM
PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB
Notifique as alterações em um trabalho. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_JOB
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT
Notifique as alterações em uma porta. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_PORT
PRINTER_CHANGE_CONFIGURE_PORT
PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR
Notifique as alterações em um processador de impressão. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER
Notifique as alterações em uma impressora. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_PRINTER
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_DELETE_PRINTER
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER
Notifique as alterações em um driver de impressora. Você pode definir esse sinalizador geral ou um ou mais dos seguintes sinalizadores específicos:
PRINTER_CHANGE_ADD_PRINTER_DRIVER
PRINTER_CHANGE_SET_PRINTER_DRIVER
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL
Notifique se alguma das alterações anteriores ocorrer.
PRINTER_CHANGE_SERVER
Windows 7: notificar quaisquer alterações no servidor.
Esse sinalizador não está incluído nas alterações monitoradas definindo o valor PRINTER_CHANGE_ALL .

Para obter descrições dos sinalizadores mais específicos na tabela anterior, consulte a função FindNextPrinterChangeNotification .

fdwOptions

O sinalizador que determina a categoria de impressoras para as quais as notificações funcionarão.

Valor Significado
PRINTER_NOTIFY_CATEGORY_ALL
0x001000
FindNextPrinterChangeNotification retorna notificações para impressoras 2D e 3D.
PRINTER_NOTIFY_CATEGORY_3D
0x002000
FindNextPrinterChangeNotification retorna notificações somente para impressoras 3D.

Quando esse sinalizador for definido como zero (0), FindFirstPrinterChangeNotification só funcionará para impressoras 2D. Esse é o valor padrão.

pPrinterNotifyOptions [in, opcional]

Um ponteiro para uma estrutura PRINTER_NOTIFY_OPTIONS . O membro pTypes dessa estrutura é uma matriz de uma ou mais estruturas PRINTER_NOTIFY_OPTIONS_TYPE , cada uma especificando um campo de informações da impressora a ser monitorado. Uma notificação de alteração ocorre quando um ou mais dos campos especificados são alterados. Quando ocorre uma alteração, a função FindNextPrinterChangeNotification pode recuperar as novas informações da impressora. Esse parâmetro poderá ser NULL se fdwFilter for diferente de zero.

Para obter uma lista de campos que podem ser monitorados, consulte PRINTER_NOTIFY_OPTIONS_TYPE.

Valor retornado

Se a função for bem-sucedida, o valor retornado será um identificador para um objeto de notificação de alteração associado à impressora ou servidor de impressão especificado.

Se houver falha na função, o valor de retorno será INVALID_HANDLE_VALUE.

Comentários

Observação

Essa é uma função de bloqueio ou síncrona e pode não retornar imediatamente. A rapidez com que essa função retorna depende de fatores de tempo de execução, como status de rede, configuração do servidor de impressão e fatores de implementação de driver de impressora que são difíceis de prever ao escrever um aplicativo. Chamar essa função de um thread que gerencia a interação com a interface do usuário pode fazer com que o aplicativo pareça não responder.

Para monitorar uma impressora ou servidor de impressão, chame a função FindFirstPrinterChangeNotification e use o identificador de objeto de notificação de alteração retornado em uma chamada para uma das funções de espera. Uma operação de espera em um objeto de notificação de alteração é atendida quando o objeto de notificação de alteração entra no estado sinalizado. O sistema sinaliza o objeto quando uma ou mais das alterações especificadas por fdwFilter ou pPrinterNotifyOptions ocorrem na impressora monitorada ou no servidor de impressão.

Quando você chama FindFirstPrinterChangeNotification, fdwFilter deve ser diferente de zero ou pPrinterNotifyOptions deve ser não NULL. Se ambos forem especificados, ocorrerão notificações para ambos.

Quando uma operação de espera em um objeto de notificação de alteração de impressora for atendida, chame a função FindNextPrinterChangeNotification para determinar a causa da notificação. Para uma condição especificada por fdwFilter, FindNextPrinterChangeNotification relata a condição ou as condições que foram alteradas. Para um campo de informações de impressora especificado por pPrinterNotifyOptions, FindNextPrinterChangeNotification relata o campo ou os campos que foram alterados, bem como as novas informações para esses campos. FindNextPrinterChangeNotification também redefine o objeto de notificação de alteração para o estado não atribuído para que você possa usá-lo em outra operação de espera para continuar monitorando a impressora ou o servidor de impressão.

Com uma exceção, não chame a função FindNextPrinterChangeNotification se o objeto de notificação de alteração não estiver no estado sinalizado. Se a função de espera retornar o valor WAIT_TIMEOUT, o objeto de alteração não estará no estado sinalizado. Chame a função FindNextPrinterChangeNotification somente se a função de espera for bem-sucedida sem atingir o tempo limite. A exceção é quando FindNextPrinterChangeNotification é chamado com o PRINTER_NOTIFY_OPTIONS_REFRESH bit definido no parâmetro pPrinterNotifyOptions .

Quando você não precisar mais do objeto de notificação de alteração, feche-o chamando a função FindClosePrinterChangeNotification .

Os chamadores de FindFirstPrinterChangeNotification devem garantir que o identificador da impressora passado para FindFirstPrinterChangeNotification permaneça válido até que FindClosePrinterChangeNotification seja chamado. Se o identificador da impressora for fechado antes do identificador de notificação de alteração da impressora, novas notificações não serão entregues.

FindFirstPrinterChangeNotification não enviará notificações de alteração para impressoras 3D para identificadores de servidor.

Observação

No Windows XP com Service Pack 2 (SP2) e posterior, o ICF (Firewall de Conexão com a Internet) bloqueia as portas da impressora por padrão, mas uma exceção para Compartilhamento de Arquivos e Impressão pode ser habilitada. Se um usuário fizer uma conexão de impressora com outro computador e a exceção não estiver habilitada, o usuário não receberá notificações de alteração de impressora do servidor. Um administrador de computador terá que habilitar a exceção.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winspool.h (inclua Windows.h)
Biblioteca
Winspool.lib
DLL
Spoolss.dll

Confira também

Impressão

Funções da API do Spooler de impressão

FindClosePrinterChangeNotification

FindNextPrinterChangeNotification

OpenPrinter

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_OPTIONS_TYPE