Função ExtEscape (wingdi.h)

A função ExtEscape permite que um aplicativo acesse recursos de dispositivo que não estão disponíveis por meio do GDI.

Sintaxe

int ExtEscape(
  [in]  HDC    hdc,
  [in]  int    iEscape,
  [in]  int    cjInput,
  [in]  LPCSTR lpInData,
  [in]  int    cjOutput,
  [out] LPSTR  lpOutData
);

Parâmetros

[in] hdc

Um identificador para o contexto do dispositivo.

[in] iEscape

A função de escape a ser executada. Ele pode ser um dos seguintes ou pode ser uma função de escape definida pelo aplicativo.

Valor Significado
CHECKJPEGFORMAT
Verifica se a impressora dá suporte a uma imagem JPEG.
CHECKPNGFORMAT
Verifica se a impressora dá suporte a uma imagem PNG.
DRAWPATTERNRECT
Desenha um retângulo branco, em escala cinza ou preto.
GET_PS_FEATURESETTING
Obtém informações sobre uma configuração de recurso especificada para um driver PostScript.
GETTECHNOLOGY
Relata se o driver é ou não um driver Postscript.
PASSAGEM
Permite que o aplicativo envie dados diretamente para uma impressora. Com suporte no modo de compatibilidade e no modo centrado em GDI.
POSTSCRIPT_DATA
Permite que o aplicativo envie dados diretamente para uma impressora. Com suporte apenas no modo de compatibilidade.
POSTSCRIPT_IDENTIFY
Define um driver PostScript para o modo centrado em GDI ou no PostScript.
POSTSCRIPT_INJECTION
Insere um bloco de dados brutos em um fluxo de trabalho do PostScript.
POSTSCRIPT_PASSTHROUGH
Envia dados diretamente para um driver de impressora PostScript. Com suporte no modo de compatibilidade e no modo centrado em PostScript.
QUERYESCSUPPORT
Determina se um escape específico é implementado pelo driver do dispositivo.
SPCLPASSTHROUGH2
Permite que os aplicativos incluam procedimentos privados e outros recursos no contexto de salvamento no nível do documento.

[in] cjInput

O número de bytes de dados apontados pelo parâmetro lpszInData .

[in] lpInData

Um ponteiro para a estrutura de entrada necessária para o escape especificado. Consulte também os comentários.

[in] cjOutput

O número de bytes de dados apontados pelo parâmetro lpszOutData .

[out] lpOutData

Um ponteiro para a estrutura que recebe a saída desse escape. Esse parâmetro não deverá ser NULL se ExtEscape for chamado como uma função de consulta. Se nenhum dado for retornado nessa estrutura, defina cbOutput como 0. Consulte também os comentários.

Retornar valor

O valor retornado especifica o resultado da função. Ele será maior que zero se a função for bem-sucedida, exceto pelo escape da impressora QUERYESCSUPPORT, que verifica apenas a implementação. O valor retornado será zero se o escape não for implementado. Um valor retornado menor que zero indica um erro.

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.
 
Use essa função para passar um valor de escape definido pelo driver para um dispositivo.

Use a função Escape para passar um dos valores de escape definidos pelo sistema para um dispositivo, a menos que o escape seja um dos escapes definidos no nEscape. O ExtEscape pode não funcionar corretamente com os escapes definidos pelo sistema. Em particular, escapes nos quais lpszInData é um ponteiro para uma estrutura que contém um membro que é um ponteiro falhará.

Observe que o comportamento descrito neste artigo é o comportamento esperado, mas cabe ao driver cumprir esse modelo.

As variáveis referenciadas por lpszInData e lpszOutData não devem ser iguais ou sobrepostas. Se as variáveis de tamanho do buffer de entrada e saída se sobrepõem, elas podem não conter os valores corretos após o retorno da chamada. Para obter os melhores resultados, lpszInData e lpszOutData devem se referir a variáveis diferentes.

A função de escape da impressora CHECKJPEGFORMAT determina se uma impressora dá suporte à impressão de uma imagem JPEG.

Antes de usar a função de escape da impressora CHECKJPEGFORMAT , chame a função de escape da impressora QUERYESCSUPPORT para determinar se o driver dá suporte a CHECKJPEGFORMAT. Para obter um código de exemplo que demonstra o uso de CHECKJPEGFORMAT, consulte Testando uma impressora para suporte a JPEG ou PNG.

A função de escape da impressora CHECKPNGFORMAT determina se uma impressora dá suporte à impressão de uma imagem PNG.

Antes de usar a função de escape da impressora CHECKJPEGFORMAT , chame a função de escape da impressora QUERYESCSUPPORT para determinar se o driver dá suporte a CHECKJPEGFORMAT. Para obter o código de exemplo, consulte Testando uma impressora para suporte a JPEG ou PNG.

O escape da impressora DRAWPATTERNRECT cria um retângulo preto branco, cinza ou preto sólido usando os recursos de padrão e regra da PCL (Linguagem de Controle de Página) em impressoras compatíveis com LaserJet ou LaserJet Hewlett-Packard. Uma escala cinza é um padrão cinza que contém uma mistura específica de pixels preto e branco.

Um aplicativo deve usar o escape QUERYESCSUPPORT para determinar se a impressora é capaz de desenhar padrões e regras antes de usar o escape DRAWPATTERNRECT .

  • As regras desenhadas com DRAWPATTERNRECT não estão sujeitas a regiões de recorte no contexto do dispositivo.
  • Os aplicativos não devem tentar apagar padrões e regras criados com DRAWPATTERNRECT colocando objetos opacos sobre eles.

Se a impressora der suporte a regras brancas, elas poderão ser usadas para apagar padrões criados por DRAWPATTERNRECT. Se a impressora não der suporte a regras brancas, não haverá nenhum método para apagar esses padrões.

Se um aplicativo não puder usar o escape DRAWPATTERNRECT e o dispositivo for uma impressora, ele geralmente deverá usar a função PatBlt . Observe que, se PatBlt for usado para imprimir um retângulo preto, o aplicativo deverá usar o operador de raster BLACKNESS. No entanto, se o dispositivo for um plotador, o aplicativo deverá usar a função Rectangle .

A função de escape da impressora GET_PS_FEATURESETTING recupera informações sobre uma configuração de recurso especificada para um driver PostScript.

Essa função de escape só terá suporte se o driver PostScript estiver no modo centrado em PostScript ou no modo centrado em GDI. Para definir o modo de driver postscript, chame a função de escape POSTSCRIPT_IDENTIFY .

Para executar essa operação, chame a função ExtEscape com os parâmetros a seguir.

A função de escape da impressora GET_PS_FEATURESETTING é válida se for chamada a qualquer momento depois de chamar a função CreateDC e antes de chamar a função DeleteDC .

A função de escape da impressora GETTECHNOLOGY identifica o tipo de driver de impressora.

Para impressoras não XPSDrv, esse escape relata se o driver é um driver Postscript.

Para impressoras XPSDrv, esse escape relata se o driver é o MXDC (Conversor de Documentos XPS da Microsoft). Se for, o escape retornará a cadeia de caracteres terminada em zero "http://schemas.microsoft.com/xps/2005/06"

A função de escape da impressora PASSTHROUGH envia dados diretamente para um driver de impressora. Para executar essa operação, chame a função ExtEscape com os parâmetros a seguir.

A função de escape da impressora PASSTHROUGH é compatível com drivers PostScript no modo centrado em GDI ou no modo de compatibilidade, mas não no modo centrado em PostScript. Os drivers no modo centrado em PostScript podem usar a função de escape POSTSCRIPT_PASSTHROUGH . Para definir um modo de driver PostScript, chame a função de escape POSTSCRIPT_IDENTIFY .

Para dados PASSTHROUGH enviados por aplicativos centrados em EPSPRINTING ou PostScript, o driver PostScript não fará nenhuma modificação. Para dados PASSTHROUGH enviados por outros aplicativos, se o driver PostScript estiver usando o protocolo de saída BCP (Protocolo de Comunicação Binária) ou TBCP (Protocolo de Comunicação Binária Marcada), o driver fará as citações BCP ou TBCP apropriadas em caracteres especiais, conforme descrito em "Especificação do Adobe Serial and Parallel Communications Protocols". Isso significa que o aplicativo deve enviar dados ASCII ou PASSTHROUGH binários puros.

A função de escape da impressora POSTSCRIPT_DATA envia dados diretamente para um driver de impressora. Para executar essa operação, chame a função ExtEscape com os parâmetros a seguir.

A função POSTSCRIPT_DATA é idêntica à função de escape PASSTHROUGH , exceto pelo suporte de drivers PostScript somente no modo de compatibilidade. Não há suporte para drivers PostScript no modo centrado em PostScript ou no modo centrado em GDI.

Os drivers no modo centrado em PostScript podem usar a função de escape POSTSCRIPT_PASSTHROUGH e os drivers no modo centrado em GDI podem usar a função de escape PASSTHROUGH . Para definir o modo de um driver PostScript, chame a função de escape POSTSCRIPT_IDENTIFY .

A função de escape da impressora POSTSCRIPT_IDENTIFY define um driver PostScript como modo centrado em GDI ou modo centrado em PostScript.

Para colocar o driver em modos centrados em GDI ou PostScript, primeiro chame a função de escape da impressora QUERYESCSUPPORT para determinar se o driver dá suporte à função de escape da impressora POSTSCRIPT_IDENTIFY . Nesse caso, você pode assumir que o driver é PSCRIPT 5.0. Em seguida, antes de chamar qualquer outra função de escape de impressora, você deve chamar POSTSCRIPT_IDENTIFY e especificar PSIDENT_GDICENTRIC ou PSIDENT_PSCENTRIC. Você deve chamar as funções de escape QUERYESCSUPPORT e POSTSCRIPT_IDENTIFY impressora antes de chamar qualquer outra função de escape de impressora.

Nota Depois que o driver PostScript for definido como modo centrado em GDI ou modo centrado em PostScript, você não poderá mais chamar a função de escape da impressora POSTSCRIPT_IDENTIFY .
 
Se você não usar a função de escape da impressora POSTSCRIPT_IDENTIFY , o driver PostScript estará no modo de compatibilidade e fornecerá suporte idêntico para as funções de escape PASSTHROUGH, POSTSCRIPT_PASSTHROUGH e POSTSCRIPT_DATA impressora.

Para drivers PostScript que dão suporte às funções de escape POSTSCRIPT_PASSTHROUGH, PASSTHROUGH e POSTSCRIPT_PASSTHROUGH impressora são idênticos.

No modo centrado em PostScript, o aplicativo é responsável por toda a saída do PostScript que marca o papel usando a função de escape POSTSCRIPT_PASSTHROUGH . Funções GDI não são permitidas. O driver é responsável pelas configurações gerais de estrutura de documentos e controle de impressora. O aplicativo pode usar a função de escape POSTSCRIPT_INJECTION impressora para injetar um bloco de dados brutos (incluindo comentários de DSC) no fluxo de trabalho em locais específicos.

A função de escape da impressora POSTSCRIPT_INJECTION insere um bloco de dados brutos em um ponto especificado em um fluxo de trabalho do PostScript.

Um driver PostScript dá suporte a essa função de escape no modo centrado em GDI ou suporte ao modo centrado em PostScript, mas não no modo de compatibilidade.

Para definir o modo do driver PostScript, chame a função de escape POSTSCRIPT_IDENTIFY .

Para executar essa operação, chame a função ExtEscape com os parâmetros a seguir.

O driver armazena internamente em cache os dados de injeção e os emite em pontos apropriados na saída. As informações armazenadas em cache são liberadas quando não são mais necessárias. No mais recente, ele é liberado após a chamada endDoc .

No modo centrado em GDI, o aplicativo só pode injetar dados de bloco DSC válidos usando a função de escape da impressora POSTSCRIPT_INJECTION . Um bloco DSC válido deve atender a todas as seguintes condições:

  • Consiste em uma sequência integral de "linhas".
  • Cada "linha" deve começar com "%%".
  • Cada "linha", exceto a última linha, deve terminar com <CR>, <LF> ou <CR><LF> , exceto para a última linha. Se a última linha não terminar com CR, LF ou CR LF, o driver acrescentará <CR><LF> após o último byte dos dados de injeção.>><<><><
  • Cada "linha" deve ter 255 bytes ou menos, incluindo o "%%", mas sem contar a terminação de <linha CR>/<LF> .
A função de escape da impressora POSTSCRIPT_PASSTHROUGH envia dados diretamente para um driver de impressora PostScript.

Um driver PostScript dá suporte a essa função de escape quando está no modo centrado em PostScript ou no modo de compatibilidade, mas não no modo centrado em GDI.

Para definir o modo do driver PostScript, chame a função de escape POSTSCRIPT_IDENTIFY .

A função de escape da impressora QUERYESCSUPPORT verifica a implementação de uma função de escape de impressora.

A função de escape da impressora SPCLPASSTHROUGH2 permite que aplicativos que imprimem em dispositivos PostScript usando EPSPRINTING incluam procedimentos PostScript privados e outros recursos no contexto de salvamento no nível do documento.

Essa fuga tem suporte apenas para compatibilidade com versões anteriores com o Adobe Acrobat. Outros aplicativos não devem usar esse escape obsoleto.

O aplicativo deve chamar esse escape antes de chamar StartDoc para que o driver armazene em cache os dados para inserção no ponto correto no fluxo postscript. Se houver suporte para esse escape, o driver também permitirá o escape de chamadas DOWNLOADFACE antes de StartDoc. O driver armazena internamente em cache os dados a serem inseridos e os dados exigidos por qualquer chamada DOWNLOADFACE de escape antes de StartDoc e os emite imediatamente antes de %%EndProlog. A sequência de chamadas SPCLPASSTHROUGH2 e DOWNLOADFACE será preservada na ordem em que seus dados forem passados, ou seja, uma chamada posterior resultará na saída de dados após os dados de uma chamada anterior. O driver considerará as fontes baixadas por chamadas DOWNLOADFACE de escape pré-StartDoc como indisponíveis para remoção durante o escopo do trabalho.

Esse escape não é registrado em arquivos EMF pelo sistema operacional, portanto, os aplicativos devem garantir que a gravação em EMF esteja desativada para esses trabalhos usando o escape.

Exemplos

Para obter um exemplo, confira Dimensionamento de uma imagem JPEG ou PNG.

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]
Plataforma de Destino Windows
Cabeçalho wingdi.h (inclua Windows.h)
Biblioteca Gdi32.lib
DLL Gdi32.dll

Confira também

Escape

Getdevicecaps

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

Impressão