Compartilhar via


Função RegisterForPrintAsyncNotifications (prnasnot.h)

Permite que um aplicativo se registre para notificações de componentes de impressão hospedados no Print Spooler, como drivers de impressora, processadores de impressão e monitores de porta.

Sintaxe

HRESULT RegisterForPrintAsyncNotifications(
  [in]  PCWSTR                            pszName,
  [in]  PrintAsyncNotificationType        *pNotificationType,
  [in]  PrintAsyncNotifyUserFilter        eUserFilter,
  [in]  PrintAsyncNotifyConversationStyle eConversationStyle,
  [in]  IPrintAsyncNotifyCallback         *pCallback,
  [out] HANDLE                            *phNotify
);

Parâmetros

[in] pszName

Um ponteiro para o nome de um servidor de impressão ou fila de impressão.

[in] pNotificationType

Um ponteiro para o GUID do esquema de dados para o tipo de notificações que o aplicativo deve receber.

[in] eUserFilter

Um valor que especifica se as notificações serão enviadas para:

  • Somente aplicativos que estão sendo executados como o mesmo usuário que o remetente de plug-in hospedado no Spooler de Impressão.
  • Um conjunto mais amplo de aplicativos de escuta.

[in] eConversationStyle

Um valor que especifica se a comunicação é bidirecional ou unidirecional.

[in] pCallback

Um ponteiro para um objeto que o componente hospedado pelo Print Spooler usará para chamar de volta o aplicativo. Isso nunca deve ser NULL.

[out] phNotify

Um ponteiro para uma estrutura que representa o registro.

Retornar valor

HRESULT Severidade Significado
S_OK SUCCESS A função foi concluída com êxito.
ALREADY_REGISTERED ERROR O objeto de registro já foi registrado.
LOCAL_ONLY_REGISTRATION SUCCESS O registro da notificação local foi bem-sucedido. O registro de notificações remotas não foi.
MAX_REGISTRATION_COUNT_EXCEEDED ERROR O número máximo de registros foi atingido. Não são permitidos mais registros.
REMOTE_ONLY_REGISTRATION SUCCESS O registro de notificações remotas foi bem-sucedido. O registro de notificações locais não foi.
 

Os valores retornados são códigos de erro COM. Como essa função pode concluir a operação com êxito, ainda retorna um HRESULT diferente de S_OK você deve usar a macro SUCCEEDED ou FAILED para determinar o sucesso da chamada. Para obter o HRESULT específico retornado pela função, use a macro HRESULT_CODE.

O exemplo de código a seguir mostra como essas macros podem ser usadas para avaliar o valor retornado.

if (SUCCEEDED(hr)) {
  // Call succeeded, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case S_OK:
      // Some action 
      break;
      case LOCAL_ONLY_REGISTRATION:
      // Some action 
      break;
    case REMOTE_ONLY_REGISTRATION:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
} else {
  // Call failed, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case ALREADY_REGISTERED:
      // Some action 
      break;
    case MAX_REGISTRATION_COUNT_EXCEEDED:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
}

Para obter mais informações sobre códigos de erro do COM, confira Tratamento de erros.

Consulte PrintAsyncNotifyError para obter outros valores de retorno possíveis.

Comentários

Nota 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 implementação do driver de impressora— fatores 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 interromper as notificações por meio de um canal unidirecional, o aplicativo de escuta passa o valor pRegistrationHandler retornado por RegisterForPrintAsyncNotifications para UnRegisterForPrintAsyncNotifications. Para um canal bidirecional, chame UnRegisterForPrintAsyncNotifications para bloquear notificações em novos canais que foram criados após essa chamada. Para bloquear notificações em canais bidirecionais existentes, o aplicativo de escuta deve fechar o canal com IPrintAsyncNotifyChannel::CloseChannel.

Como resultado de uma chamada RegisterForPrintAsyncNotifications , o método IUnknown::AddRef é chamado para o objeto pCallback . Chamar UnRegisterForPrintAsyncNotifications liberará o objeto pCallback . A contagem de referência do objeto pCallback também será incrementada quando um canal for criado e decrementado quando o canal for fechado.

O parâmetro pSchema é um ponteiro GUID que o spooler aceita e usa para filtrar os clientes ouvintes. Qualquer cliente do mecanismo de notificação assíncrona do spooler pode definir seu próprio tipo de notificação. Embora o spooler não esteja ciente do tipo de notificação enviado, ele ainda filtra os clientes ouvintes com base no tipo de notificação. O esquema de notificação que o pSchema faz referência é o esquema usado pelo objeto de notificação que expõe IPrintAsyncNotifyDataObject. Os clientes do pipe de notificação do spooler podem definir seu próprio esquema de dados e podem enviar qualquer tipo de dados para frente e para trás e o GUID referenciado por pSchema é exclusivo para esse esquema de dados.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho prnasnot.h
Biblioteca WinSpool.lib
DLL Spoolss.dll

Confira também

Client Impersonation (em inglês)

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

Impressão