Feeds:
文章
留言

Archive for 十二月 2nd, 2007

移除 Printer Spooler 中的 Job

前一陣子開發一個虛擬印表機程式,有一個待處理問題,就是軟體透過我的虛擬印表機程式列印資料後,Printer Spooler 中的 Job 不會清除,雖然一般使用者不會特別去點開 Spooler 的視窗,也不太了解他代表什麼意義,不過一般使用上還是會對使用者造成困惑。

這個星期終於有點時間好好研究一下這個問題,雖然我還不太了解真正的解法,不過,目前發現可透過 SetJob 這個 Win32 API 移除 Job,SetJob() 是用來控制 Job 的動作,如暫停、繼續或刪除等,因此,可透過這個方式暫時解決我的問題,具體步驟如下:
1. 透過 OpenPrinter 開啟指定的印表機並取得 Handle
2. 透過 EnumJobs 取得印表機 Spooler 的所有 Job 列表
3. 利用 SetJob 並將 Command 設為 JOB_CONTROL_DELETE (如果是 Win95/98/ME 使用 JOB_CONTROL_CANCEL)

另外,下面這個程式是我用來檢測 Printer 和 Job 的程式,如有需要自行請下載,以下是執行結果畫面

Read Full Post »