DeviceCapabilitiesA 函数 (wingdi.h)

DeviceCapabilities 函数检索打印机驱动程序的功能。

语法

int DeviceCapabilitiesA(
  [in]  LPCSTR         pDevice,
  [in]  LPCSTR         pPort,
  [in]  WORD           fwCapability,
  [out] LPSTR          pOutput,
  [in]  const DEVMODEA *pDevMode
);

参数

[in] pDevice

指向包含打印机名称的以 null 结尾的字符串的指针。 请注意,这是打印机的名称,而不是打印机驱动程序的名称。

[in] pPort

指向以 null 结尾的字符串的指针,该字符串包含设备连接到的端口的名称,例如 LPT1。

[in] fwCapability

要查询的功能。 此参数的取值可为下列值之一:

含义
DC_BINNAMES
检索打印机的纸箱的名称。 pOutput 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 24 个字符,包含纸箱的名称。 返回值指示数组中的条目数。 除非名称长度为 24 个字符,否则名称字符串以 null 结尾。 如果 pOutputNULL,则返回值是所需的 bin 条目数。
DC_BINS
检索可用纸箱的列表。 pOutput 缓冲区接收 一个 WORD 值数组,这些值指示打印机的可用纸张来源。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 DEVMODE 结构的 dmDefaultSource 成员的说明。 如果 pOutputNULL,则返回值指示数组中所需的条目数。
DC_COLLATE
如果打印机支持排序,则返回值为 1;否则,返回值为零。 不使用 pOutput 参数。
DC_COLORDEVICE
如果打印机支持彩色打印,则返回值为 1;否则,返回值为零。 不使用 pOutput 参数。
DC_COPIES
返回设备可以打印的副本数。
DC_DRIVER
返回打印机驱动程序的版本号。
DC_DUPLEX
如果打印机支持双面打印,则返回值为 1;否则,返回值为零。 不使用 pOutput 参数。
DC_ENUMRESOLUTIONS
检索打印机支持的分辨率列表。 pOutput 缓冲区接收 LONG 值数组。 对于每个支持的分辨率,数组包含一对 LONG 值,用于指定分辨率的 x 和 y 维度(以每英寸点为单位)。 返回值指示支持的分辨率数。 如果 pOutputNULL,则返回值指示支持的分辨率数。
DC_EXTRA
返回打印机驱动程序的 DEVMODE 结构的特定于设备的部分所需的字节数。
DC_FIELDS
返回打印机驱动程序的 DEVMODE 结构的 dmFields 成员。 dmFields 成员指示打印机驱动程序支持结构中与设备无关部分的成员。
DC_FILEDEPENDENCIES
检索安装驱动程序时需要加载的任何其他文件的名称。 pOutput 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含文件的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 null 结尾。 如果 pOutputNULL,则返回值为文件数。
DC_MAXEXTENT
返回打印机驱动程序的 DEVMODE 结构的 dmPaperLengthdmPaperWidth 成员可以指定的最大纸张大小。 返回值的 LOWORD 包含最大 dmPaperWidth 值,HIWORD 包含最大 dmPaperLength 值。
DC_MEDIAREADY
检索当前可供使用的纸质表单的名称。 pOutput 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含纸质窗体的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 null 结尾。 如果 pOutputNULL,则返回值为纸质表单的数量。
DC_MEDIATYPENAMES
检索支持的媒体类型的名称。 pOutput 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含支持的媒体类型的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则字符串以 null 结尾。 如果 pOutputNULL,则返回值是所需的媒体类型名称数。
DC_MEDIATYPES
检索支持的媒体类型的列表。 pOutput 缓冲区接收指示支持的媒体类型的 DWORD 值数组。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 DEVMODE 结构的 dmMediaType 成员的说明。 如果 pOutputNULL,则返回值指示数组中所需的条目数。
DC_MINEXTENT
返回打印机驱动程序的 DEVMODE 结构的 dmPaperLengthdmPaperWidth 成员可以指定的最小纸张大小。 返回值的 LOWORD 包含最小 dmPaperWidth 值,HIWORD 包含最小 dmPaperLength 值。
DC_ORIENTATION
根据纵向逆时针旋转以生成横向方向的度数返回设备的纵向和横向方向之间的关系。 返回值可以是下列值之一:
0
无横向。
90
纵向旋转 90 度以产生景观。
270
纵向旋转 270 度以产生景观。
DC_NUP
检索一个整数数组,这些整数指示打印机能够打印每个打印页的多个文档页。 pOutput 缓冲区接收 DWORD 值的数组。 每个值表示每个打印页支持的文档页数。 返回值指示数组中的条目数。 如果 pOutputNULL,则返回值指示数组中所需的条目数。
DC_PAPERNAMES
检索受支持纸张名称的列表, (例如 Letter 或 Legal) 。 pOutput 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含纸质窗体的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 null 结尾。 如果 pOutputNULL,则返回值为纸质表单的数量。
DC_PAPERS
检索支持的纸张大小的列表。 pOutput 缓冲区接收一个 WORD 值数组,这些值指示打印机的可用纸张大小。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 DEVMODE 结构的 dmPaperSize 成员的说明。 如果 pOutputNULL,则返回值指示数组中所需的条目数。
DC_PAPERSIZE
检索每个支持的纸张尺寸(以十分之一毫米为单位)。 pOutput 缓冲区接收 POINT 结构的数组。 每个结构都包含宽度 (x 维) 和长度 (纸张大小的 y 维) ,就像纸张处于 DMORIENT_PORTRAIT 方向一样。 返回值指示数组中的条目数。
DC_PERSONALITY
检索打印机支持的打印机说明语言的列表。 pOutput 缓冲区接收字符串缓冲区数组。 每个缓冲区长度为 32 个字符,包含打印机描述语言的名称。 返回值指示数组中的条目数。 除非名称长度为 32 个字符,否则名称字符串以 null 结尾。 如果 pOutputNULL,则返回值指示所需的数组条目数。
DC_PRINTERMEM
返回值是可用打印机内存量(以 KB 为单位)。 不使用 pOutput 参数。
DC_PRINTRATE
返回值指示打印机的打印速率。 为 DC_PRINTRATEUNIT 返回的值指示 DC_PRINTRATE 值的单位。 不使用 pOutput 参数。
DC_PRINTRATEPPM
返回值指示打印机的打印速率(以每分钟页为单位)。 不使用 pOutput 参数。
DC_PRINTRATEUNIT
返回值是以下值之一,用于指示 为 DC_PRINTRATE 标志返回的值的打印速率单位。 不使用 pOutput 参数。
PRINTRATEUNIT_CPS
每秒的字符数。
PRINTRATEUNIT_IPM
英寸/分钟。
PRINTRATEUNIT_LPM
每分钟行数。
PRINTRATEUNIT_PPM
每分钟页数。
DC_SIZE
返回打印机驱动程序的 DEVMODE 结构的 dmSize 成员。
DC_STAPLE
如果打印机支持装订,则返回值为非零值;否则,返回值为零。 不使用 pOutput 参数。
DC_TRUETYPE
检索驱动程序使用 TrueType 字体的能力。 对于DC_TRUETYPE,pOutput 参数应为 NULL。 返回值可以是以下一个或多个:
DCTT_BITMAP
设备可以将 TrueType 字体打印为图形。
DCTT_DOWNLOAD
设备可以下载 TrueType 字体。
DCTT_SUBDEV
设备可以将设备字体替换为 TrueType 字体。
DC_VERSION
返回打印机驱动程序符合的规范版本。

[out] pOutput

指向数组的指针。 数组的格式取决于 fwCapability 参数的设置。 请参阅上述每个功能,了解 pOutputNULL 时返回的内容。

[in] pDevMode

指向 DEVMODE 结构的指针。 如果此参数为 NULL,DeviceCapabilities 将检索指定打印机驱动程序的当前默认初始化值。 否则,该函数将检索 pDevMode 指向的结构中包含的值。

返回值

如果函数成功,则返回值取决于 fwCapability 参数的设置。 返回值零通常表示函数成功完成时,存在某种类型的故障,例如不支持的功能。 有关更多详细信息,请参阅 fwCapability 值的说明。

如果函数返回 -1,这可能意味着该功能不受支持或存在常规函数故障。

注解

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

如果打印机驱动程序支持自定义设备功能,则驱动程序必须为每个自定义功能调用 SetPrinterData 函数。 SetPrinterData 函数将相应的打印机数据添加到打印系统,使 32 位应用程序能够访问 64 位 Windows 安装上的自定义功能。

对于每个自定义功能,必须首先添加描述功能类型的打印机数据。 为此,在调用 SetPrinterData 时,请将 pValueName 字符串设置为 CustomDeviceCapabilityType_Xxx,其中“Xxx”是功能的十六进制表示形式。 例如,你可能有“CustomDeviceCapabilityType_1234”。 设置的注册表数据必须是 REG_DWORD 类型,并且必须将其值设置为下列值之一:

  • 如果自定义功能为 DWORD,则为 0
  • 1,如果自定义功能是字节缓冲区
  • 2,如果自定义功能是项数组
如果自定义功能是项数组,则必须再次调用 SetPinterData 来提供有关数组中项大小的信息。 为此,调用 SetPinterData 时,提供的 pValueName 字符串必须是“CustomDeviceCapabilitySize_Xxx”,其中 Xxx 是该功能的十六进制表示形式。 例如,你可能有“CustomDeviceCapabilitySize_1234”。 设置的注册表数据必须是 REG_DWORD 类型,并且必须将其值设置为数组中项的大小(以字节为单位)。

注意

wingdi.h 标头将 DeviceCapabilities 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

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

另请参阅

DEVMODE

DOCINFO

DocumentProperties

GetDeviceCaps

GetProcAddress

LoadLibrary

打印后台处理程序 API 函数

打印

StartDoc