Compartilhar via


Função DrvPrinterEvent (winddiui.h)

A função DrvPrinterEvent de uma interface de impressora é chamada pelo spooler de impressão ao processar eventos específicos da impressora que podem exigir ação do driver da impressora.

Sintaxe

BOOL DrvPrinterEvent(
  [in] LPWSTR pPrinterName,
       int    DriverEvent,
       DWORD  Flags,
       LPARAM lParam
);

Parâmetros

[in] pPrinterName

Ponteiro fornecido pelo chamador para uma cadeia de caracteres de nome de impressora terminada em NULL. O formato de cadeia de caracteres pode ser \Machine\PrinterName para especificar uma impressora remota ou PrinterName para especificar uma impressora local.

DriverEvent

Código de evento fornecido pelo chamador que identifica o evento. Os seguintes códigos de evento são definidos:

Código do evento Definição
PRINTER_EVENT_ADD_CONNECTION O spooler acabou de processar uma chamada para sua função AddPrinterConnection , que permite que um usuário cliente se conecte a uma impressora remota criada anteriormente.
PRINTER_EVENT_ATTRIBUTES_CHANGED Os bits de atributo de uma impressora foram alterados. Em resposta à chamada de um aplicativo para a função SetPrinter , o spooler chama a função DrvPrinterEvent do driver de impressora, passando o código do evento na chamada. Quando esse código de evento é usado, o parâmetro lParam aponta para uma estrutura PRINTER_EVENT_ATTRIBUTES_INFO que descreve os atributos antigos e os novos.
PRINTER_EVENT_CACHE_DELETE O spooler está excluindo o cache de arquivos do cliente.
PRINTER_EVENT_CACHE_REFRESH O spooler está atualizando os arquivos armazenados em cache do cliente.
PRINTER_EVENT_CONFIGURATION_CHANGE Reservado.
PRINTER_EVENT_CONFIGURATION_UPDATE A configuração da impressora foi alterada. Quando esse código de evento é usado, o parâmetro lParam aponta para uma cadeia de caracteres Unicode que contém uma notificação formatada de acordo com o Esquema de Notificação bidi.
PRINTER_EVENT_DELETE_CONNECTION O spooler acabou de processar uma chamada para sua função DeletePrinterConnection , que permite que um usuário cliente remova uma conexão de impressora.
PRINTER_EVENT_DELETE O spooler acabou de processar uma chamada para sua função DeletePrinter , que permite que um administrador exclua uma instância de impressora.
PRINTER_EVENT_INITIALIZE O spooler acabou de processar uma chamada para sua função AddPrinter , que permite que um administrador disponibilize uma impressora em um servidor ou sua função SetPrinter , que permite que um administrador modifique o estado de uma impressora. Em uma conexão de renderização do lado do cliente, o computador cliente acaba de adicionar a impressora GUID. O evento PRINTER_EVENT_INITIALIZE especifica um valor de parâmetro lParam NULL para chamadas DrvPrinterEvent no Windows Vista e versões anteriores. Para o Windows 7 e versões posteriores, o parâmetro lParam é um identificador de token de usuário. Os drivers de impressão podem usar o identificador de token retornado para consultar dados do usuário ou representar o usuário.

Flags

Sinalizador de bit fornecido pelo chamador, definido da seguinte maneira:

Valor Definição
PRINTER_EVENT_FLAG_NO_UI Se definida, a função não deverá exibir uma interface do usuário. Durante a instalação de um processador de impressão, monitor de impressão ou driver de impressora, a única maneira pela qual uma interface do usuário é permitida é por meio do uso da diretiva VendorSetup . Consulte Entradas de arquivo INF da impressora e Operações personalizadas de instalação da impressora para obter mais informações.

Cuidado

A diretiva VendorSetup foi preterida e não deve ser usada por novos drivers v3 ou v4 que você desenvolve. Essas informações sobre VendorSetup são fornecidas apenas para referência ou para a manutenção de drivers v3 existentes que já usam essa diretiva INF.

lParam

Não usado, a menos que o parâmetro DriverEvent seja definido como PRINTER_EVENT_ATTRIBUTES_CHANGED. Nesse caso, lParam contém o endereço de uma estrutura PRINTER_EVENT_ATTRIBUTES_INFO. (Consulte a descrição anterior do parâmetro DriverEvent .) Para todos os outros valores do parâmetro DriverEvent , o parâmetro lParam é NULL.

Retornar valor

Se a operação for bem-sucedida, a função deverá retornar TRUE; caso contrário, ele deve retornar FALSE. No entanto, no momento, a única vez em que o valor retornado da função é verificado é quando o spooler chama DrvPrinterEvent durante o processamento da função AddPrinter , com DriverEvent definido como PRINTER_EVENT_INITIALIZE. Se DrvPrinterEvent retornar FALSE nesse caso, o spooler não criará a impressora e, em vez disso, fará com que AddPrinter falhe.

Comentários

Todas as DLLs da interface da impressora devem fornecer uma função DrvPrinterEvent e a função deve dar suporte ao código de evento PRINTER_EVENT_INITIALIZE. O suporte para todos os outros códigos de evento é opcional.

As configurações do Registro armazenadas ao manipular um evento de PRINTER_EVENT_INITIALIZE devem ser armazenadas na chave HKEY_LOCAL_MACHINE chamando SetPrinterData. Para os códigos de evento PRINTER_EVENT_INITIALIZE e PRINTER_EVENT_DELETE, o spooler verifica se o chamador tem privilégio administrativo e chama DrvPrinterEvent ao representar o chamador.

Por outro lado, se você precisar armazenar configurações no registro ao manipular um evento PRINTER_EVENT_ADD_CONNECTION, a DLL da interface da impressora deverá gravá-las na chave HKEY_CURRENT_USER para que elas sejam armazenadas por usuário. Em seguida, se um usuário com um perfil móvel fizer logon em outro sistema, a conexão seguirá o usuário. A função DrvPrinterEvent é chamada somente quando o usuário faz a conexão pela primeira vez, e não quando o usuário faz logon posteriormente em outros sistemas usando o perfil móvel.

Para os códigos de evento PRINTER_EVENT_ADD_CONNECTION e PRINTER_EVENT_DELETE_CONNECTION, o contexto de execução da função DrvPrinterEvent é o aplicativo de chamada (geralmente a Pasta de Impressão) e a função pode exibir uma interface do usuário. Para todos os outros códigos de evento, o contexto de execução é o spooler de impressão e uma interface do usuário não pode ser exibida.

Um exemplo de um driver que pode exibir uma interface do usuário quando uma conexão é feita é um driver de FAX, que pode solicitar ao usuário o nome e o número de telefone do usuário (remetente de FAX) e salvar as informações até que a conexão seja excluída.

Um exemplo do tipo de arquivo que pode ser armazenado em um cache de cliente é um arquivo grande de métricas de fonte que contém muitas informações a serem gravadas no registro. Quando o código de evento da função DrvPrinterEvent é PRINTER_EVENT_CACHE_REFRESH, a DLL da interface da impressora pode recarregar o arquivo do servidor para garantir que o cache esteja atualizado.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho winddiui.h (inclua Winddiui.h)