DrvPrinterEvent 函式 (winddiui.h)
印表機介面 DLL 的 DrvPrinterEvent 函式會在處理印表機驅動程式可能需要動作的印表機特定事件時,由列印後台處理程式呼叫。
語法
BOOL DrvPrinterEvent(
[in] LPWSTR pPrinterName,
int DriverEvent,
DWORD Flags,
LPARAM lParam
);
參數
[in] pPrinterName
呼叫端提供的指標,指向NULL終止的印表機名稱字串。 字串格式可以是 \Machine\PrinterName 來指定遠端印表機,或指定本機列印機的 PrinterName 。
DriverEvent
識別事件的呼叫端提供事件程序代碼。 定義下列事件代碼:
事件程序代碼 | 定義 |
---|---|
PRINTER_EVENT_ADD_CONNECTION | 多任務緩衝處理程式剛完成對 AddPrinterConnection 函式的呼叫,可讓用戶端用戶連線到先前建立的遠端印表機。 |
PRINTER_EVENT_ATTRIBUTES_CHANGED | 印表機的屬性位已變更。 為了回應應用程式的 SetPrinter 函式呼叫,多任務緩衝處理程式會呼叫印表機驅動程式的 DrvPrinterEvent 函式,並在呼叫中傳遞事件程式代碼。 使用此事件程式代碼時, lParam 參數會指向描述舊屬性和新屬性 的PRINTER_EVENT_ATTRIBUTES_INFO 結構。 |
PRINTER_EVENT_CACHE_DELETE | 多任務緩衝處理程式正在刪除用戶端的檔案快取。 |
PRINTER_EVENT_CACHE_REFRESH | 多任務緩衝處理程式正在更新用戶端的快取檔案。 |
PRINTER_EVENT_CONFIGURATION_CHANGE | 保留的。 |
PRINTER_EVENT_CONFIGURATION_UPDATE | 列印機組態已變更。 使用此事件程式代碼時, lParam 參數會指向 Unicode 字串,其中包含根據 Bidi 通知架構格式化的通知。 |
PRINTER_EVENT_DELETE_CONNECTION | 多任務緩衝處理程式剛完成對 DeletePrinterConnection 函式的呼叫,可讓用戶端使用者移除印表機連線。 |
PRINTER_EVENT_DELETE | 多任務緩衝處理程式剛完成對 DeletePrinter 函式的呼叫,可讓系統管理員刪除列印機實例。 |
PRINTER_EVENT_INITIALIZE | 多任務緩衝處理程式剛完成對 AddPrinter 函式的呼叫,可讓系統管理員在伺服器上提供印表機,或讓系統管理員修改印表機狀態的 SetPrinter 函式。 在用戶端轉譯連線中,用戶端計算機剛新增 GUID 印表機。 PRINTER_EVENT_INITIALIZE 事件會針對 Windows Vista 和舊版的DrvPrinterEvent呼叫指定 NULL lParam 參數值。 針對 Windows 7 和更新版本,lParam 參數是使用者令牌句柄。 列印驅動程式可以使用傳回的令牌句柄來查詢用戶數據或模擬使用者。 |
Flags
呼叫端提供的位旗標,定義如下:
值 | 定義 |
---|---|
PRINTER_EVENT_FLAG_NO_UI | 如果設定,函式 不得 顯示使用者介面。 在安裝列印處理器、印表監視器或印表機驅動程式期間,允許使用者介面的唯一方式是透過使用 VendorSetup 指示詞。 如需詳細資訊 ,請參閱印表機 INF 檔案專案 和 自定義印表機安裝作業 。 |
警告
VendorSetup 指示詞已被取代,您開發的任何新 v3 或 v4 驅動程式都不應該使用。 有關 VendorSetup 的這項資訊僅供參考,或維護已使用此 INF 指示詞的現有 v3 驅動程式。
lParam
除非 DriverEvent 參數設定為 PRINTER_EVENT_ATTRIBUTES_CHANGED,否則不會使用 。 在此情況下, lParam 包含PRINTER_EVENT_ATTRIBUTES_INFO結構的位址。 (請參閱 DriverEvent 參數的上述描述。) 針對 DriverEvent 參數的其他所有值, lParam 參數為 NULL。
傳回值
如果作業成功,函式應該會傳回 TRUE;否則,它應該會傳回 FALSE。 不過,目前,檢查函式傳回值的唯一時間是當多任務緩衝處理程式在處理 AddPrinter 函式期間呼叫 DrvPrinterEvent,而 DriverEvent 設定為 PRINTER_EVENT_INITIALIZE。 如果 DrvPrinterEvent 在此案例中傳回 FALSE ,多任務緩衝處理器不會建立印表機,而是會導致 AddPrinter 失敗。
備註
所有 印表機介面 DLL 都必須提供 DrvPrinterEvent 函式,而且函式必須支援PRINTER_EVENT_INITIALIZE事件程序代碼。 所有其他事件代碼的支援都是選擇性的。
處理PRINTER_EVENT_INITIALIZE事件時所儲存的登錄設定,應該藉由呼叫 SetPrinterData,儲存在HKEY_LOCAL_MACHINE機碼底下。 針對PRINTER_EVENT_INITIALIZE和PRINTER_EVENT_DELETE事件代碼,多任務緩衝處理程式會驗證呼叫端具有系統管理許可權,並在模擬呼叫端時呼叫 DrvPrinterEvent 。
相反地,如果您需要在處理PRINTER_EVENT_ADD_CONNECTION事件時將設定儲存在登錄中,印表機介面 DLL 應該在HKEY_CURRENT_USER機碼下寫入這些設定,讓它們以每個使用者為基礎儲存。 然後,如果具有漫遊配置檔的使用者登入另一個系統,則聯機會遵循使用者。 只有在使用者第一次建立連線時,才會呼叫 DrvPrinterEvent 函式,而不是當使用者後續使用漫遊配置檔登入其他系統時呼叫。
針對PRINTER_EVENT_ADD_CONNECTION和PRINTER_EVENT_DELETE_CONNECTION事件代碼, DrvPrinterEvent 函式的執行內容是呼叫的應用程式 (通常是列印資料夾) ,而且函式可以顯示使用者介面。 對於所有其他事件代碼,執行內容是列印後台處理程式,而且無法顯示使用者介面。
建立連線時可能會顯示使用者介面的驅動程式範例是傳真驅動程式,其可能會提示使用者輸入使用者的名稱和電話號碼, (傳真發件者) ,並儲存資訊,直到刪除連線為止。
可能儲存在用戶端快取中的檔類型範例是大型字型計量檔案,其中包含太多資訊無法寫入登錄。 當 DrvPrinterEvent 函式的事件代碼PRINTER_EVENT_CACHE_REFRESH時,印表機介面 DLL 可以從伺服器重載檔案,以確保快取是最新的。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | winddiui.h (包含Winddiui.h) |