### 函数功能

该函数检索打印机设备驱动器的性能。

### 函数原型

DWORD DeviceCapabilities（LPCTSTR pDevice, LPCTSTR pPort, WORD fwCapability, LPTSTR pOutput, CONST DEVMODE *pDevMode）；

### 参数

pDevice：指向以null结尾的字符串的指针，该字符串包含打印机名，注意是打印机名，而不是打印驱动器名。
nPort：指向以null结尾的字符串的指针，该字符串包含了设备连接的通讯口的名字，如LPT1。
fwCapablity：指定要查询的性能，该参数可取下列值之一：
DC_BINADJUST：Windows 95检索在DEVMODE结构中指定的纸张资源的页面位置，DEVMODE结构由指定，返回值可能如下：
DCBA_FACEDOWNCENTER, DCBA_FACEUPCENTER, DCBA_FACEUPLEFT, DCBA_FACEUPRIGHT, DCBA_FACEDOWNNONE, DCBA_FACEDOWNCENTER, DCBA_FACEDOWNLEFT, DCBA_FACEDOWNRIGHT, windows 98不支持。
DC_BINNAMES：拷贝一个包含一系列纸张接收器名的数组。这个数组的格式为char PaperName [cBinMax] [cchBinName]，其中cchBinName为24。如果pOutput参数为NULL，返回值是所需的接收器项数，否则返回值是接收器的拷贝数。
DC_BINS：检索一系列可用的纸张接收器，该函数把列表作为一个WORD数组拷贝到pOutput参数中，如果pOutput为NULL，则函数返回所支持的接收器的数目，以使应用程序有机会分配准确尺寸的缓冲区，至于有关接收器的更多信息，请参见结构的元素的描述。
DC_COPIES：返回设备可以打印的拷贝数。DC_DRIVER返回打印驱动程序的版本数。
DC_DATATYPE_PRODUCED：在Windows 95中返回值是打印驱动程序支持的数据类型数，如果函数返回-1，驱动程序只能理解RAW数据类型，被支持的数据类型名拷贝到一个数组中，在调用StartDoc函数指定该数据类型时，使用DOCINFO结构中的名字。Windows 98不支持。
DC_DUPLEX：返回双向支持的级别，如果打印机有双向打印的能力，函数返回1，否则值为零。
DC_EMF_COMPLIANT：在Windows 95中确定打印机驱动程序是否支持增强图元文件（EMF），返回值为1表明打印机驱动支持EMF，-1表示不支持EMF，Windows 98不支持。
DC_ENUMRESOLUTIONS：返回一系列可用的分辨率，如果pOutput为Null，则函数返回可用的分辨率配置，分辨率由一对LONG类型整数来分别表示水平和垂直分辨率（每英寸点数）。
DC_EXTRA：返回打印驱动DEVMODE结构的设备专用部分所需的字节。
DC_FIELDS：返回打印驱动DEVMODE结构的dmFields元素。DmFilelds元素指定结构的设备无关部分中哪些成员是打印驱动支持的。
DC_FILEFEPENDENCIES：返回安装驱动程序时必须装载的系列文件。如果pOutput参数为Null函数返回文件个数，否则pOutput用char [chFileName, 64]形式指向一个文件名数组，每个文件名都是以Null结束的字符串。
DC_MAXEXTENT：返回POINTS结构，该结构包含打印机驱动程序的DEVMODE结构的dmPaperLength和dmPaperWidth元素可指定的最大纸张规格，POINTS结构的x元素包含最大dmPaperWidth值。Y元素包含最大dmPaperLength值。
DC_MINEXTENT：返回POINTS结构，该结构包含打印机驱动程序的DEVMODE结构的dmPaperLengh和dmPaperWidth元素可指定的最小纸张规格，POINTS结构的x元素包含最大dmPaperWidth值，y元素包含最大dmPaperLength值。
DC_ORIETATION：返回设备纵向和横向打印之间的关系，以纵向打印逆时针旋转产生横向打印时旋转的度数来表示，返回值如下：
0：没有横向，90：纵向旋转90度产生横向，270：纵向旋转270度产生横向。
DC_PAPERNAMES：检索一系列支持的纸名（如Letter或Lega）。如果pOutput参数为Null，则函数返回可用的打印机规格数。否则pOutput以char [cpaperNames, 64]的形式指向一个打印纸名数组，每一个纸张名都是以null结束的字符串。
DC_PAPERS：检索一系列支持的纸张规格，函数把列表作为一个WORD数组拷贝到pOutput中，并且返回数组中的项数。如果pOutput为Null，则函数返回所支持的纸张规格数以使应用程序有机会分配准确尺寸的缓冲区，有关打印纸规格的更多信息，请参见DEVMOVE结构中关于dmPagerSize成员的描述。
DC_PAPERSIZE：以十分之一毫米为单位，把所有支持的打印机尺寸，拷贝到由pOutput参数指定的POINT结构数组中去。如果打印机在DMORIENT_PORTRAIT方向，则返回纸张尺雨的宽（x维）和长（y维）。
DC_SIZE：返回打印机驱动程序DEVMODE结构的dmSize元素值。
DC_TRUETYPE：检索驱动程序使用TrueType字体的能力，对于DC_TRUETYPE，pOutput参数应为NULL，返回如下一值或多值，其值的含义为：
DCTT_BITMAP：设备可以按图形方式打印TrueType字体。DCTT_DOWNLOAD：设备能够卸载TrueType字体。
DCTT_DOWNLOAD_OUTLINE：在Windows 95和Windows 98中设备可以卸载TrueType字体。
DCTT_SUBDEV：设备可以用TrueType字体替代设备字体。
DC_VERSION：返回打印机驱动程序遵循的指定版本。
Poutput：指向一个字节数组，数组的格式依赖于fwCapabilities参数的设置。如果pOutput为零，则DeiceCapabilities返回输出数据所需的字节数。
PdevMode：指向一个DEVMODE结构，如果该参数为NULL，DeviceCapabilities则检索指定打印机驱动程序的当前缺省的初始化值，否则该函数检索包含在由pDevMode指向的结构中的值。

### 返回值

如果成功，返回值依赖于fwCapabilities参数的设置，如果失败，则返回C1。
Windows NT：若想获得更多错误信息，请调用GetLastError函数。
注释：在16位Windows版本中，DeviceCapabilities函数在打印机驱动程序中执行，并且需要调用LoadLibrary和GetProcAddress函数得到该函数的指针，但这些都不再需要了。因为DeviceCapabilities是WinAPI的一部分。
在打印机驱动程序中不需要调用LoadLibraryp函数，由DevMode参数指向的DEVMODE结构，可以通过调用DocumentProperties函数而得到。

### 速查

Windows NT：3.1及以上版本；Windows：不支持；Windows CE：不支持；头文件：wingdi.h；库文件：winspool.lib；Unicode：在Windows NT上实现为Unicode和ANSI两种版本。