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 類型,而且您必須將其值設定為下列其中一項:

  • 0,如果自定義功能是 DWORD
  • 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)
程式庫 WinSpool.lib
Dll WinSpool.drv

另請參閱

DEVMODE

DOCINFO

DocumentProperties

GetDeviceCaps

GetProcAddress

LoadLibrary

列印多工緩衝處理器 API 函式

列印

StartDoc