Função OpenPrinter2

Recupera um identificador para a impressora, o servidor de impressão ou outros tipos de identificadores especificados no subsistema de impressão, ao mesmo tempo em que define algumas das opções da impressora.

Sintaxe

BOOL OpenPrinter2(
  _In_  LPCTSTR            pPrinterName,
  _Out_ LPHANDLE           phPrinter,
  _In_  LPPRINTER_DEFAULTS pDefault,
  _In_  PPRINTER_OPTIONS   pOptions
);

Parâmetros

pPrinterName [in]

Um ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica o nome da impressora ou do servidor de impressão, o objeto da impressora, o XcvMonitor ou o XcvPort.

Para um objeto de impressora, use: PrinterName,Job xxxx. Para um XcvMonitor, use: ServerName,XcvMonitor MonitorName. Para um XcvPort, use: ServerName,XcvPort PortName.

Windows Vista: Se FOR NULL, ele indicará o servidor de impressão local.

phPrinter [out]

Um ponteiro para uma variável que recebe um identificador para a impressora aberta ou o objeto do servidor de impressão.

pDefault [in]

Um ponteiro para uma estrutura PRINTER_DEFAULTS . Esse valor pode ser NULL.

pOptions [in]

Um ponteiro para uma estrutura PRINTER_OPTIONS . Esse valor pode ser NULL.

Valor retornado

Se a função for bem-sucedida, o valor retornado será um valor diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Não chame esse método em DllMain.

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 do driver de impressora que são difíceis de prever ao gravar 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.

A versão ANSI dessa função não é implementada e retorna ERROR_NOT_SUPPORTED.

O parâmetro pDefault permite que você especifique os valores de tipo de dados e modo de dispositivo usados para imprimir documentos enviados pela função StartDocPrinter . No entanto, você pode substituir esses valores usando a função SetJob depois que um documento for iniciado.

Você pode chamar a função OpenPrinter2 para abrir um identificador para um servidor de impressão ou para determinar os direitos de acesso do cliente a um servidor de impressão. Para fazer isso, especifique o nome do servidor de impressão no parâmetro pPrinterName , defina os membros pDatatype e pDevMode da estrutura PRINTER_DEFAULTS como NULL e defina o membro DesiredAccess para especificar um valor de máscara de acesso do servidor, como SERVER_ALL_ACCESS. Quando terminar de usar o identificador, passe-o para a função ClosePrinter para fechá-la.

Use o membro DesiredAccess da estrutura PRINTER_DEFAULTS para especificar os direitos de acesso necessários. Os direitos de acesso podem ser um dos seguintes.

Valor de Acesso Desejado Significado
PRINTER_ACCESS_ADMINISTER Para executar tarefas administrativas, como as fornecidas pelo SetPrinter.
PRINTER_ACCESS_USE Para executar operações básicas de impressão.
PRINTER_ALL_ACCESS Para executar todas as tarefas administrativas e operações básicas de impressão, exceto SYNCHRONIZE. Consulte Direitos de Acesso Padrão.
PRINTER_ACCESS_MANAGE_LIMITED Para executar tarefas administrativas, como as fornecidas por SetPrinter e SetPrinterData. Esse valor está disponível a partir de Windows 8.1.
valores de segurança genéricos, como WRITE_DAC Para permitir direitos de acesso de controle específicos. Consulte Direitos de Acesso Padrão.

Se um usuário não tiver permissão para abrir uma impressora especificada ou um servidor de impressão com o acesso desejado, a chamada OpenPrinter2 falhará e GetLastError retornará o valor ERROR_ACCESS_DENIED.

Quando pPrinterName é uma impressora local, o OpenPrinter2 ignora todos os valores dos dwFlags que a estrutura PRINTER_OPTIONS apontou para o uso de pOptions, exceto PRINTER_OPTION_CLIENT_CHANGE. Se o último for passado, o OpenPrinter2 retornará ERROR_ACCESS_DENIED. Assim, ao abrir uma impressora local, o OpenPrinter2 não oferece nenhuma vantagem sobre o OpenPrinter.

Windows Vista: Os dados da impressora retornados pelo OpenPrinter2 são recuperados de um cache local, a menos que o sinalizador PRINTER_OPTION_NO_CACHE seja definido no campo dwFlags da estrutura PRINTER_OPTIONS referenciada por pOptions.

Exemplos

Neste exemplo, o OpenPrinter2 falha quando PRINTER_ACCESS_MANAGE_LIMITED é passado para a estrutura PRINTER_DEFAULTS e o usuário não tem a permissão apropriada.

// Specify the limited management permission.
PRINTER_DEFAULTS defaults = {};
defaults.DesiredAccess = PRINTER_ACCESS_MANAGE_LIMITED;

// Open a printer to which the user has no administrative rights.
HANDLE printer = nullptr;
assert(!OpenPrinter2(L QueueWithNoAdminRights , // Queue name
                     &printer,                  // Printer handle
                     &defaults,                 // Printer defaults
                     nullptr));                 // Printer options

assert(GetLastError() == ERROR_ACCESS_DENIED);

if (printer)
{
    ClosePrinter(printer);
}

Para obter um programa de exemplo que mostra como usar essa função, consulte Como imprimir usando a API de impressão GDI.

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]
Cabeçalho
Winspool.h (inclua Windows.h)
Biblioteca
Winspool.lib
DLL
Spoolss.dll
Nomes Unicode e ANSI
OpenPrinter2W (Unicode) e OpenPrinter2A (ANSI)

Confira também

Impressão

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

ClosePrinter

PRINTER_DEFAULTS

PRINTER_OPTIONS

SetJob

SetPrinter

StartDocPrinter

OpenPrinter