GetPrinterData 函式
GetPrinterData函式會擷取指定印表機或列印伺服器的組態資料。
在 Windows 2000 和更新版本的 Windows 中,呼叫GetPrinterData相當於呼叫GetPrinterDataEx,並將 pKeyName參數設定為 「PrinterDriverData」。
語法
DWORD GetPrinterData(
_In_ HANDLE hPrinter,
_In_ LPTSTR pValueName,
_Out_ LPDWORD pType,
_Out_ LPBYTE pData,
_In_ DWORD nSize,
_Out_ LPDWORD pcbNeeded
);
參數
-
hPrinter [in]
-
函式擷取組態資料的印表機或列印伺服器的控制碼。 使用OpenPrinter、OpenPrinter2或AddPrinter函式來擷取印表機控制碼。
-
pValueName [in]
-
識別要擷取之資料的 Null 終止字串指標。
對於印表機,此字串是登錄中印表機 「PrinterDriverData」 機碼下登錄值的名稱。
對於列印伺服器,此字串是下列一節中所列的其中一個預先定義字串。
-
pType [out]
-
接收值之變數的指標,指出 pData中擷取的資料類型。 函式會傳回 儲存資料的 SetPrinterData 或 SetPrinterDataEx 呼叫中指定的類型。 如果您不需要資料類型,請將此參數設定為 Null 。
-
pData [out]
-
接收設定資料的緩衝區指標。
-
nSize [in]
-
pData所指向緩衝區的大小,以位元組為單位。
-
vmNeeded [out]
-
接收組態資料大小之變數的指標,以位元組為單位。 如果 nSize 指定的緩衝區大小太小,此函式會 傳回ERROR_MORE_DATA,而 ERROR_MORE_DATA 表示所需的緩衝區大小。
傳回值
如果函式成功,傳回值會 ERROR_SUCCESS。 如果函式失敗,傳回值為錯誤值。
備註
注意
這是封鎖或同步函式,可能不會立即傳回。 此函式傳回的速度取決於執行時間因素,例如網路狀態、列印伺服器設定,以及撰寫應用程式時難以預測的印表機驅動程式實作因素。 從管理與使用者介面互動的執行緒呼叫此函式,可能會使應用程式看起來沒有回應。
GetPrinterData 會 擷取 SetPrinterDataEx 或 SetPrinterData 函式所設定的印表機組態資料。
GetPrinterData可能會觸發對GetPrinterDataFromPort的Windows呼叫,這可能會寫入登錄。 如果這樣做,可能會發生副作用,例如在用戶端中觸發更新或升級印表機事件識別碼 20,如果印表機在網路中共用。
如果 hPrinter 是列印伺服器的控制碼, pValueName 可以指定下列其中一個預先定義的值。
| 值 | 註解 |
|---|---|
| SPLREG_ALLOW_USER_MANAGEFORMS | Windows XP 搭配 Service Pack 2 (SP2) 和更新版本 Windows Server 2003 Service Pack 1 (SP1) 和更新版本 |
| SPLREG_ARCHITECTURE | |
| SPLREG_BEEP_ENABLED | |
| SPLREG_DEFAULT_SPOOL_DIRECTORY | |
| SPLREG_DNS_MACHINE_NAME | |
| SPLREG_DS_PRESENT | 成功傳回時,如果電腦位於 DS 網域, 則 pData 會包含0x0001,否則為 0。 |
| SPLREG_DS_PRESENT_FOR_USER | 成功傳回時,如果使用者登入 DS 網域, 則 pData 會包含0x0001,否則為 0。 |
| SPLREG_EVENT_LOG | |
| SPLREG_MAJOR_VERSION | |
| SPLREG_MINOR_VERSION | |
| SPLREG_NET_POPUP | Windows Server 2003 和更新版本不支援 |
| SPLREG_NET_POPUP_TO_COMPUTER | 成功傳回時,如果應該將作業通知傳送至用戶端電腦, 則 pData 會包含 1,如果工作通知要傳送給使用者,則為 0。 Windows Server 2003 和更新版本不支援 |
| SPLREG_OS_VERSION | Windows XP 及更新版本 |
| SPLREG_OS_VERSIONEX | |
| SPLREG_PORT_THREAD_PRIORITY_DEFAULT | |
| SPLREG_PORT_THREAD_PRIORITY | |
| SPLREG_PRINT_DRIVER_ISOLATION_GROUPS | Windows 7 和更新版本 |
| SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE | Windows 7 和更新版本 |
| SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE | Windows 7 和更新版本 |
| SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT | Windows 7 和更新版本 |
| SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY | Windows 7 和更新版本 |
| SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY | Windows 7 和更新版本 |
| SPLREG_REMOTE_FAX | 成功傳回時,如果傳真服務支援遠端用戶端, 則 pData 會包含0x0001,否則為 0。 |
| SPLREG_RETRY_POPUP | 成功傳回時,如果伺服器設定為重試所有作業的快顯視窗,則 pData 會包含 1,如果伺服器未重試所有作業的快顯視窗,則為 0。 Windows Server 2003 和更新版本不支援 |
| SPLREG_SCHEDULER_THREAD_PRIORITY | |
| SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT | |
| SPLREG_WEBSHAREMGMT | Windows Server 2003 和更新版本 |
下列 pValueName 值表示發生錯誤時的集區列印行為。
| 值 | 註解 |
|---|---|
| SPLREG_RESTART_JOB_ON_POOL_ERROR | pData的值表示發生錯誤之後,作業在另一個埠重新開機的時間,以秒為單位。 此設定會與 SPLREG_RESTART_JOB_ON_POOL_ENABLED搭配使用。 |
| SPLREG_RESTART_JOB_ON_POOL_ENABLED | pData中的非零值表示已啟用SPLREG_RESTART_JOB_ON_POOL_ERROR。 |
SPLREG_RESTART_JOB_ON_POOL_ERROR中指定的時間是最短的時間。 根據下列埠監視設定而定,實際時間可能更長,這些設定是此登錄機碼下的登錄值:
HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\ <MonitorName> \Ports
呼叫 RegQueryValueEx 函式來查詢這些值。
| 埠監視器設定 | 資料類型 | 意義 |
|---|---|---|
| StatusUpdateEnabled | REG_DWORD | 如果非零值,可讓埠監視器以埠狀態更新多工緩衝處理常式。 |
| StatusUpdateInterval | REG_DWORD | 指定埠監視器以埠狀態更新多工緩衝處理常式的間隔,以分鐘為單位。 |
在 Windows 7 和更新版本的 Windows 中,預設會在用戶端上轉譯傳送至列印伺服器的列印工作。 下列值會設定列印工作的用戶端轉譯,如果您在 pValueName中設定下列值,則可以讀取。
| 設定 | 資料類型 | 描述 |
|---|---|---|
| EMFDespoolingSetting | REG_DWORD | 值為 0,如果登錄中沒有此值,則啟用列印工作的預設用戶端轉譯。 值為 1 會停用列印工作的用戶端轉譯。 |
| ForceClientSideRendering | REG_DWORD | 值為 0,或如果此值不存在於登錄中,將會導致列印工作在用戶端上呈現。 如果無法在用戶端上轉譯列印工作,則會在伺服器上轉譯。 如果無法轉譯伺服器上的列印工作,它將會失敗。 值為 1 會在用戶端上轉譯列印工作。 如果無法在用戶端上轉譯列印工作,它將會失敗。 |
規格需求
| 需求 | 值 |
|---|---|
| 最低支援的用戶端 |
Windows 2000 Professional [僅限傳統型應用程式] |
| 最低支援的伺服器 |
Windows 2000 Server [僅限桌面應用程式] |
| 標頭 |
|
| 程式庫 |
|
| DLL |
|
| Unicode 與 ANSI 名稱 |
GetPrinterDataW (Unicode) 和 GetPrinterDataA (ANSI) |