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 驱动程序。
PASSTHROUGH
允许应用程序将数据直接发送到打印机。 在兼容模式和以 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。 请参见备注。

返回值

返回值指定函数的结果。 如果函数成功,则它大于零,但 QUERYESCSUPPORT 打印机转义除外,该转义仅检查实现。 如果未实现转义,则返回值为零。 小于零的返回值表示错误。

注解

注意 这是一个阻塞或同步函数,可能不会立即返回。 此函数返回的速度取决于运行时因素(例如网络状态、打印服务器配置和打印机驱动程序实现),这些因素在编写应用程序时难以预测。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。
 
使用此函数将驱动程序定义的转义值传递给设备。

使用 Escape 函数将系统定义的转义值之一传递给设备,除非转义是 nEscape 中定义的转义之一。 ExtEscape 可能无法正确处理系统定义的转义。 具体而言, 转义,其中 lpszInData 是指向结构的指针,该结构包含作为指针的成员将失败。

请注意,本文中所述的行为是预期行为,但驱动程序应遵守此模型。

lpszInDatalpszOutData 引用的变量不应相同或重叠。 如果输入和输出缓冲区大小变量重叠,则调用返回后它们可能不包含正确的值。 为了获得最佳结果, lpszInDatalpszOutData 应引用不同的变量。

CHECKJPEGFORMAT 打印机转义函数确定打印机是否支持打印 JPEG 图像。

在使用 CHECKJPEGFORMAT 打印机转义函数之前,请调用 QUERYESCSUPPORT 打印机转义函数以确定驱动程序是否支持 CHECKJPEGFORMAT。 有关演示如何使用 CHECKJPEGFORMAT 的示例代码,请参阅 测试打印机的 JPEG 或 PNG 支持

CHECKPNGFORMAT 打印机转义函数确定打印机是否支持打印 PNG 图像。

在使用 CHECKJPEGFORMAT 打印机转义函数之前,请调用 QUERYESCSUPPORT 打印机转义函数以确定驱动程序是否支持 CHECKJPEGFORMAT。 有关示例代码,请参阅 测试 JPEG 或 PNG 支持的打印机

DRAWPATTERNRECT 打印机转义使用页面控制语言 (PCL) 的图案和规则功能在 Hewlett-Packard LaserJet 或 LaserJet 兼容的打印机上创建白色、灰色刻度或纯黑色矩形。 灰度是包含黑色和白色像素的特定混合的灰色图案。

在使用 DRAWPATTERNRECT 转义之前,应用程序应使用 QUERYESCSUPPORT 转义来确定打印机是否能够绘制模式和规则。

  • 使用 DRAWPATTERNRECT 绘制的规则不受设备上下文中的剪辑区域的约束。
  • 应用程序不应尝试擦除使用 DRAWPATTERNRECT 创建的模式和规则,方法是在它们上方放置不透明对象。

如果打印机支持白色规则,则这些规则可用于擦除 DRAWPATTERNRECT 创建的模式。 如果打印机不支持白色规则,则没有用于擦除这些模式的方法。

如果应用程序无法使用 DRAWPATTERNRECT 转义,并且设备是打印机,则通常应改用 PatBlt 函数。 请注意,如果使用 PatBlt 打印黑色矩形,则应用程序应使用 BLACKNESS 光栅运算符。 但是,如果设备是绘图仪,则应用程序应使用 Rectangle 函数。

GET_PS_FEATURESETTING打印机转义函数检索有关 PostScript 驱动程序的指定功能设置的信息。

仅当 PostScript 驱动程序处于以 PostScript 为中心的模式或以 GDI 为中心的模式时,才支持此转义函数。 若要设置 PostScript 驱动程序模式,请调用 POSTSCRIPT_IDENTIFY 转义函数。

若要执行此操作,请使用以下参数调用 ExtEscape 函数。

如果在调用 CreateDC 函数之后和调用 DeleteDC 函数之前随时调用,则GET_PS_FEATURESETTING打印机转义函数有效。

GETTECHNOLOGY 打印机转义函数标识打印机驱动程序的类型。

对于非 XPSDrv 打印机,此转义报告驱动程序是否为 Postscript 驱动程序。

对于 XPSDrv 打印机,此转义报告驱动程序是否为 Microsoft XPS 文档转换器 (MXDC) 。 如果是,则转义返回以零结尾的字符串“http://schemas.microsoft.com/xps/2005/06"

PASSTHROUGH 打印机转义函数将数据直接发送到打印机驱动程序。 若要执行此操作,请使用以下参数调用 ExtEscape 函数。

PostScript 驱动程序在以 GDI 为中心的模式或兼容模式下支持 PASSTHROUGH 打印机转义功能,但在以 PostScript 为中心的模式下不受支持。 以 PostScript 为中心的模式下的驱动程序可以使用 POSTSCRIPT_PASSTHROUGH 转义函数。 若要设置 PostScript 驱动程序模式,请调用 POSTSCRIPT_IDENTIFY 转义函数。

对于由 EPSPRINTING 或以 PostScript 为中心的应用程序发送的 PASSTHROUGH 数据,PostScript 驱动程序不会进行任何修改。 对于其他应用程序发送的 PASSTHROUGH 数据,如果 PostScript 驱动程序使用 BCP (二进制通信协议) 或 TBCP (标记的二进制通信协议) 输出协议,则驱动程序对特殊字符执行适当的 BCP 或 TBCP 引用,如“Adobe 串行和并行通信协议规范”中所述。这意味着应用程序应发送 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_GDICENTRICPSIDENT_PSCENTRIC。 在调用任何其他打印机转义函数之前,必须调用 QUERYESCSUPPORTPOSTSCRIPT_IDENTIFY 打印机转义函数。

注意 将 PostScript 驱动程序设置为以 GDI 为中心的模式或以 PostScript 为中心的模式后,将不再允许调用 POSTSCRIPT_IDENTIFY 打印机转义函数。
 
如果不使用 POSTSCRIPT_IDENTIFY 打印机转义函数,PostScript 驱动程序将处于兼容模式,并且为 PASSTHROUGHPOSTSCRIPT_PASSTHROUGHPOSTSCRIPT_DATA 打印机转义函数提供相同的支持。

对于支持 POSTSCRIPT_PASSTHROUGHPASSTHROUGHPOSTSCRIPT_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 块必须满足以下所有条件:

  • 它由“行”的整型序列组成。
  • 每个“行”必须以“%%”开头。
  • 除最后一行外,每个“行”都必须以 <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 调用的序列将按照其数据传入的顺序保留,也就是说,以后的调用会在之前调用的数据之后生成数据输出。 驱动程序会将 pre-StartDoc 转义 DOWNLOADFACE 调用下载的字体视为在作业范围内无法删除。

操作系统不会将此转义记录在 EMF 文件中,因此应用程序必须确保使用转义关闭这些作业的 EMF 录制。

示例

有关示例,请参阅 调整 JPEG 或 PNG 图像的大小

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h (包括 Windows.h)
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

Esc 键

GetDeviceCaps

打印后台处理程序 API 函数

打印