ExtEscape 関数 (wingdi.h)

ExtEscape 関数を使用すると、アプリケーションは GDI では使用できないデバイス機能にアクセスできます。

構文

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

パラメーター

[in] hdc

デバイス コンテキストへのハンドル。

[in] iEscape

実行するエスケープ関数。 次のいずれか、またはアプリケーション定義のエスケープ関数を指定できます。

意味
CHECKJPEGFORMAT
プリンターが JPEG イメージをサポートしているかどうかを確認します。
CHECKPNGFORMAT
プリンターが PNG イメージをサポートしているかどうかを確認します。
DRAWPATTERNRECT
白、グレースケール、または黒の四角形を描画します。
GET_PS_FEATURESETTING
PostScript ドライバーの指定した機能設定に関する情報を取得します。
GETTECHNOLOGY
ドライバーが Postscript ドライバーであるかどうかを報告します。
パススルー
アプリケーションがプリンターにデータを直接送信できるようにします。 互換モードと GDI 中心モードでサポートされます。
POSTSCRIPT_DATA
アプリケーションがプリンターにデータを直接送信できるようにします。 互換モードでのみサポートされます。
POSTSCRIPT_IDENTIFY
PostScript ドライバーを GDI 中心または PostScript 中心モードに設定します。
POSTSCRIPT_INJECTION
PostScript ジョブ ストリームに生データのブロックを挿入します。
POSTSCRIPT_PASSTHROUGH
PostScript プリンター ドライバーにデータを直接送信します。 互換モードと PostScript 中心モードでサポートされます。
QUERYESCSUPPORT
特定のエスケープがデバイス ドライバーによって実装されるかどうかを判断します。
SPCLPASSTHROUGH2
アプリケーションがドキュメント レベルの保存コンテキストにプライベート プロシージャやその他のリソースを含めることができます。

[in] cjInput

lpszInData パラメーターが指すデータのバイト数。

[in] lpInData

指定したエスケープに必要な入力構造体へのポインター。 「解説」も参照してください。

[in] cjOutput

lpszOutData パラメーターが指すデータのバイト数。

[out] lpOutData

このエスケープから出力を受け取る構造体へのポインター。 ExtEscape がクエリ関数として呼び出される場合、このパラメーターは NULL にすることはできません。 この構造体でデータを返さない場合は、 cbOutput を 0 に設定します。 「解説」も参照してください。

戻り値

戻り値は、関数の結果を指定します。 関数が成功した場合は 0 より大きくなります。ただし、実装のみをチェックする QUERYESCSUPPORT プリンター エスケープを除きます。 エスケープが実装されていない場合、戻り値は 0 です。 0 未満の戻り値はエラーを示します。

注釈

メモ これはブロック関数または同期関数であり、すぐには返されない場合があります。 この関数が返す速度は、ネットワーク状態、プリント サーバーの構成、プリンター ドライバーの実装などの実行時の要因によって異なります。これは、アプリケーションを記述するときに予測が困難な要因です。 ユーザー インターフェイスとの対話を管理するスレッドからこの関数を呼び出すと、アプリケーションが応答しなくなる可能性があります。
 
ドライバー定義のエスケープ値をデバイスに渡すには、この関数を使用します。

エスケープが nEscape で定義されているエスケープのいずれかでない限り、システム定義のエスケープ値の 1 つをデバイスに渡すには、Escape 関数を使用します。 ExtEscape は、システム定義のエスケープでは正しく機能しない可能性があります。 特に、 lpszInData がポインターであるメンバーを含む構造体へのポインターであるエスケープは失敗します。

この記事で説明する動作は想定される動作ですが、このモデルに準拠するのはドライバー次第であることに注意してください。

lpszInDatalpszOutData によって参照される変数は、同じまたは重複しないようにしてください。 入力と出力バッファー サイズ変数が重複している場合、呼び出しが返された後に正しい値が含まれていない可能性があります。 最良の結果を得るには、 lpszInDatalpszOutData が 異なる変数を参照する必要があります。

CHECKJPEGFORMAT プリンターエスケープ関数は、プリンターが JPEG イメージの印刷をサポートしているかどうかを判別します。

CHECKJPEGFORMAT プリンターエスケープ関数を使用する前に、QUERYESCSUPPORT プリンターエスケープ関数を呼び出して、ドライバーが CHECKJPEGFORMAT をサポートしているかどうかを判断します。 CHECKJPEGFORMAT の使用を示すサンプル コードについては、「JPEG または PNG サポート用のプリンターのテスト」を参照してください。

CHECKPNGFORMAT プリンターエスケープ関数は、プリンターが PNG イメージの印刷をサポートしているかどうかを判断します。

CHECKJPEGFORMAT プリンターエスケープ関数を使用する前に、QUERYESCSUPPORT プリンターエスケープ関数を呼び出して、ドライバーが CHECKJPEGFORMAT をサポートしているかどうかを判断します。 サンプル コードについては、「 JPEG または PNG サポート用のプリンターのテスト」を参照してください。

DRAWPATTERNRECT プリンター エスケープは、LaserJet または LaserJet 互換プリンターのページ コントロール言語 (PCL) のパターンとルール機能を使用して、白、グレースケール、または黒の実線の四角形 Hewlett-Packard 作成します。 グレースケールは、黒と白のピクセルの特定の混合物を含む灰色のパターンです。

アプリケーションでは、DRAWPATTERNRECT エスケープを使用する前に、QUERYESCSUPPORT エスケープを使用して、プリンターがパターンとルールを描画できるかどうかを判断する必要があります。

  • DRAWPATTERNRECT で描画されたルールは、デバイス コンテキストのクリッピング領域の対象になりません。
  • アプリケーションでは、 DRAWPATTERNRECT で作成されたパターンとルールを、不透明なオブジェクトをそれらの上に配置して消去しないでください。

プリンターで白い規則がサポートされている場合は、 DRAWPATTERNRECT によって作成されたパターンを消去するために使用できます。 プリンターが白いルールをサポートしていない場合、これらのパターンを消去する方法はありません。

アプリケーションで DRAWPATTERNRECT エスケープを使用できず、デバイスがプリンターである場合は、通常、代わりに PatBlt 関数を使用する必要があります。 PatBlt を使用して黒い四角形を印刷する場合、アプリケーションでは BLACKNESS ラスター演算子を使用する必要があることに注意してください。 ただし、デバイスがプロッターの場合は、アプリケーションで Rectangle 関数を使用する必要があります。

GET_PS_FEATURESETTING プリンターエスケープ関数は、PostScript ドライバーの指定した機能設定に関する情報を取得します。

このエスケープ関数は、PostScript ドライバーが PostScript 中心モードまたは GDI 中心モードの場合にのみサポートされます。 PostScript ドライバー モードを設定するには、 POSTSCRIPT_IDENTIFY エスケープ関数を呼び出します。

この操作を実行するには、次のパラメーターを指定して ExtEscape 関数を呼び出します。

GET_PS_FEATURESETTING プリンターエスケープ関数は、CreateDC 関数を呼び出した後、DeleteDC 関数を呼び出す前にいつでも呼び出された場合に有効です。

GETTECHNOLOGY プリンターエスケープ関数は、プリンター ドライバーの種類を識別します。

XPSDrv 以外のプリンターの場合、このエスケープは、ドライバーが Postscript ドライバーであるかどうかを報告します。

XPSDrv プリンターの場合、このエスケープは、ドライバーが Microsoft XPS ドキュメント コンバーター (MXDC) であるかどうかを報告します。 その場合、エスケープは 0 で終わる文字列 "http://schemas.microsoft.com/xps/2005/06" を返します。

PASSTHROUGH プリンターエスケープ関数は、プリンター ドライバーにデータを直接送信します。 この操作を実行するには、次のパラメーターを指定して ExtEscape 関数を呼び出します。

PASSTHROUGH プリンター エスケープ関数は、GDI 中心モードまたは互換モードの PostScript ドライバーでサポートされていますが、PostScript 中心モードではサポートされていません。 PostScript 中心モードのドライバーでは、 POSTSCRIPT_PASSTHROUGH エスケープ関数を使用できます。 PostScript ドライバー モードを設定するには、 POSTSCRIPT_IDENTIFY エスケープ関数を呼び出します。

EPSPRINTING または PostScript 中心のアプリケーションによって送信される PASSTHROUGH データの場合、PostScript ドライバーは変更を行いません。 他のアプリケーションによって送信される PASSTHROUGH データの場合、PostScript ドライバーが BCP (バイナリ通信プロトコル) または TBCP (タグ付きバイナリ通信プロトコル) 出力プロトコルを使用している場合、ドライバーは、"Adobe Serial and Parallel Communications Protocols Specification" で説明されているように、特殊文字に対して適切な BCP または TBCP の引用符で囲みます。つまり、アプリケーションは ASCII または純粋なバイナリ PASSTHROUGH データを送信する必要があります。

POSTSCRIPT_DATA プリンター エスケープ関数は、プリンター ドライバーにデータを直接送信します。 この操作を実行するには、次のパラメーターを指定して ExtEscape 関数を呼び出します。

POSTSCRIPT_DATA関数は PASSTHROUGH エスケープ関数と同じですが、互換性モードでのみ PostScript ドライバーでサポートされている点が異なります。 PostScript 中心モードまたは GDI 中心モードの PostScript ドライバーではサポートされていません。

PostScript 中心モードのドライバーでは 、POSTSCRIPT_PASSTHROUGH エスケープ関数を使用でき、GDI 中心モードのドライバーでは PASSTHROUGH エスケープ関数を使用できます。 PostScript ドライバーのモードを設定するには、 POSTSCRIPT_IDENTIFY エスケープ関数を呼び出します。

POSTSCRIPT_IDENTIFY プリンターエスケープ関数は、PostScript ドライバーを GDI 中心モードまたは PostScript 中心モードに設定します。

GDI 中心または PostScript 中心のモードでドライバーを配置するには、最初に QUERYESCSUPPORT プリンターエスケープ関数を呼び出して、ドライバーが POSTSCRIPT_IDENTIFY プリンターエスケープ関数をサポートしているかどうかを判断します。 その場合は、ドライバーが PSCRIPT 5.0 であると想定できます。 その後、他のプリンターエスケープ関数を呼び出す前に、 POSTSCRIPT_IDENTIFY を呼び出し、 PSIDENT_GDICENTRIC または PSIDENT_PSCENTRICを指定する必要があります。 他のプリンター エスケープ関数を呼び出す前に、 QUERYESCSUPPORT 関数と POSTSCRIPT_IDENTIFY プリンター エスケープ関数を呼び出す必要があります。

メモ PostScript ドライバーを GDI 中心モードまたは PostScript 中心モードに設定すると、 POSTSCRIPT_IDENTIFY プリンターエスケープ関数を呼び出すことはできません。
 
POSTSCRIPT_IDENTIFY プリンターエスケープ機能を使用しない場合、PostScript ドライバーは互換モードであり、PASSTHROUGHPOSTSCRIPT_PASSTHROUGH、およびプリンターエスケープ機能POSTSCRIPT_DATA同じサポートを提供します。

POSTSCRIPT_PASSTHROUGHPASSTHROUGH、POSTSCRIPT_PASSTHROUGH プリンターエスケープ機能をサポートする PostScript ドライバーの場合、同じです。

PostScript 中心モードでは、アプリケーションは 、POSTSCRIPT_PASSTHROUGH エスケープ関数を使用して用紙をマークするすべての PostScript 出力を担当します。 GDI 関数は使用できません。 ドライバーは、全体的なドキュメント構造とプリンターコントロールの設定を担当します。 アプリケーションでは 、POSTSCRIPT_INJECTION プリンターエスケープ関数を使用して、生データのブロック (DSC コメントを含む) を特定の場所のジョブ ストリームに挿入できます。

POSTSCRIPT_INJECTION プリンターエスケープ関数は、PostScript ジョブ ストリーム内の指定したポイントに生データのブロックを挿入します。

PostScript ドライバーは、GDI 中心モードまたは PostScript 中心モードのサポートではこのエスケープ関数をサポートしますが、互換性モードではサポートしていません。

PostScript ドライバーのモードを設定するには、 POSTSCRIPT_IDENTIFY エスケープ関数を呼び出します。

この操作を実行するには、次のパラメーターを指定して ExtEscape 関数を呼び出します。

ドライバーは内部的にインジェクション データをキャッシュし、出力内の適切なポイントで出力します。 キャッシュされた情報は、不要になったときにフラッシュされます。 最後に、 EndDoc 呼び出しの後にフラッシュされます。

GDI 中心モードでは、アプリケーションは、 POSTSCRIPT_INJECTION プリンターエスケープ関数を使用して有効な DSC ブロック データのみを挿入できます。 有効な DSC ブロックは、次のすべての条件を満たしている必要があります。

  • これは、"行" の整数シーケンスで構成されます。
  • 各 "line" は "%%" で始まる必要があります。
  • 最後の行を除く各 "行" は、最後の行を除き、CR、LF、または <CR><LF> で<終わる必要があります。><> 最後の行が CR、LF>、<または <CR>>< LF> で<終わらない場合、ドライバーは挿入データの<最後のバイトの後に CR><LF> を追加します。
  • 各 "行" は、"%%" を含めて 255 バイト以下である必要がありますが、CR>/<LF> 行の終了は<カウントされません。
POSTSCRIPT_PASSTHROUGH プリンター エスケープ関数は、PostScript プリンター ドライバーにデータを直接送信します。

PostScript ドライバーは、PostScript 中心モードまたは互換モードの場合に、このエスケープ関数をサポートしますが、GDI 中心モードではサポートされません。

PostScript ドライバーのモードを設定するには、 POSTSCRIPT_IDENTIFY エスケープ関数を呼び出します。

QUERYESCSUPPORT プリンターエスケープ関数は、プリンターエスケープ関数の実装をチェックします。

SPCLPASSTHROUGH2 プリンターエスケープ機能を使用すると、EPSPRINTING を使用して PostScript デバイスに印刷するアプリケーションは、ドキュメント レベルの保存コンテキストでプライベート PostScript プロシージャやその他のリソースを含めることができます。

このエスケープは、Adobe Acrobat との下位互換性のためにのみサポートされます。 他のアプリケーションでは、この古いエスケープを使用しないでください。

アプリケーションで StartDoc を 呼び出す前にこのエスケープを呼び出す必要があります。これにより、ドライバーは PostScript ストリーム内の正しいポイントに挿入するためにデータをキャッシュします。 このエスケープがサポートされている場合、ドライバーは StartDoc の前に DOWNLOADFACE のエスケープ呼び出しも許可します。 ドライバーは、挿入するデータと、StartDoc の前に DOWNLOADFACE のエスケープ呼び出しに必要なデータを内部的にキャッシュし、%%EndProlog の直前にそれらをすべて出力します。 SPCLPASSTHROUGH2呼び出しと DOWNLOADFACE 呼び出しのシーケンスは、データが渡された順序で保持されます。つまり、後で呼び出すと、以前の呼び出しのデータの後にデータ出力が生成されます。 ドライバーは、StartDoc 前のエスケープ DOWNLOADFACE 呼び出しによってダウンロードされたフォントは、ジョブのスコープ中に削除できないと見なします。

このエスケープはオペレーティング・システムによって EMF ファイルに記録されないため、アプリケーションはエスケープを使用してそれらのジョブに対して EMF 記録がオフになっていることを確認する必要があります。

例については、「 JPEG または PNG イメージのサイズ設定」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー wingdi.h (Windows.h を含む)
Library Gdi32.lib
[DLL] Gdi32.dll

こちらもご覧ください

Escape

GetDeviceCaps

印刷スプーラー API 関数

印刷