2011-09-07 272 views
0

我感興趣的是坐落在窗戶內的shadow文件(.SHD)裏面的一些信息後臺打印目錄「C:\ WINDOWS \ SYSTEM32 \閥芯\ PRINTERS 」。每次打印作業開始時,都會在該目錄中創建假脫機文件(.spl)和影子文件(.shd)。到目前爲止,我已經成功地檢測到打印作業何時開始,並且能夠暫停該打印作業。如果您不暫停作業,文件最終將進入打印機,然後通過窗口刪除。需要幫助打開被鎖定打印機假脫機shadow文件(.SHD)

我的問題是。我無法打開.SHD文件,因爲它們被鎖定的方式無法在sprint假脫機程序打開它們時讀取它們。我甚至試圖去在Windows資源管理器中的文件,只是將文件複製到另一個文件,並沒有工作。我可以打開的.SPL假脫機文件。我只需等待,並相當快地將假脫機程序釋放該文件。對於影子文件,它永久保存在這個文件中。不幸的是,它是我需要的。

的我使用的是專門來打開文件中的代碼行如下:

m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 

IOException異常,我得到的是:

該進程無法訪問文件「C:\ Windows \ system32 \ spool \ PRINTERS \ FP00083.SHD',因爲它正在被另一個進程使用。

所以,是的,它正由另一個進程使用。它被窗口的後臺打印程序服務使用。但我不認爲我能做些什麼。我想要做的就是讀取文件。我不想對它做任何更改。有什麼我可以在這裏做或我只是擰了?

回答

1

嗯,我沒有找到解決這個問題的方法。我懷疑這是沒有解決方案,它是通過設計。但是我確實找到了另一種獲取我想要的信息的方法(至少現在看起來如此)。

我使用FindNextPrinterChangeNotification()例程出WINSPOOL.DRV庫。這個人返回一個指向PRINTER_NOTIFY_INFO結構的指針,該結構又包含一個PRINTER_NOTIFY_INFO_DATA結構數組。在該數組中,有一個元素的「字段」成員標記爲「JOB_NOTIFY_FIELD_DEVMODE」。該元素包含DEVMODE類型的相當大的結構。結構由M $在這裏解釋http://msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx。這個結構看起來像包含了我正在尋找的內容,顯然這個結構被封裝在.SHD文件中,無論如何根據這個頁面http://www.undocprint.org/formats/winspool/shd。我想知道那個.SHD文件還有什麼,但是我仍然無法打開它,因爲它在作業暫停時被鎖定,我懷疑它保持鎖定狀態,直到作業完成。哦,我認爲我的新解決方案無論如何都更優雅。

+0

您是否嘗試過與複印張數場「dmCopies」的情況下,如果您打印Word文檔和值是正確的或總是爲「1」的新的解決方案? – karelp90

0

只要確保你暫停工作在兩個盒子裏裝的和服務器的閥芯,那麼你應該能夠複製/開/移動SHD文件,就如同您的SPL文件。工作對我來說,反正...

0

這個工作對我來說:
- 杭打印機(如卡紙紙)
- 打印和觀察.SHD和.SPL創建
- 停止打印後臺處理程序
- 打開文件

0

的問題可能是FileShare.ReadWrite參數。你要求閱讀和寫入文件,也許這就是爲什麼你會得到一個錯誤。您應該嘗試請求只讀權限。

1

檢查選項:「保留打印的文檔」(如果您有HP打印機),然後看到您的假脫機文件文件夾,則影子和假脫機文件都在那裏。

enter image description here