2013-11-15 84 views
3

我有一個使用舊報告庫(ReportPro)的應用程序。在Windows 7 64上,它有時無法找到默認打印機。我做了一些挖掘,發現Windows註冊表中的問題。 ReportPro通過GetProfileString窗口API確定可用的打印機。它變得可用打印機的列表,從這裏開始:未檢測到Windows 7默認打印機

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices 

它從這裏默認打印機:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device 

我所看到的在Windows註冊表中的打印機將顯示在列表中名稱和網絡端口,我們使用的是:

HP LaserJet 5200 Series PCL 5 on Ne03: 
Microsoft XPS Document Writer on Ne01: 
HP Officejet Pro K8600 Series on Ne02: 
Phaser 8860-2 PS on Ne00: 
CutePDF Writer on CPW2: 

在某些系統默認打印機字符串的值是不同的。這將是這樣的:

的HP LaserJet 5200系列PCL 5 Ne01

特別是相對於打印機列表中NEXX號碼是默認打印機值不同。

報告包無法找到默認打印機,因爲它在比較中使用打印機名稱和NExx編號。

爲什麼NExx值會不同,我如何確保值「粘」?我目前找到的解決方案是將其他打印機設置爲默認打印機,然後選擇正確的默認打印機。這似乎暫時解決了這個問題,但這不是永久性的。

這個問題似乎只是Win7。在過去的8年中,有幾款XP機器從未遇到過這個問題。

+1

在註冊表中看到第一個定義的打印機是用戶默認的。您也可以使用同一個密鑰的「UserSelectedDefault」註冊表值中的整數值進行驗證。 – LaKraven

+0

Microsoft在此處命名爲「Nexx:」:[link] http://technet.microsoft.com/en-us/library/cc775625(v = ws.10).aspx *當打印機是本地打印機,port是它所連接的端口的名稱;例如,LPT1。否則,端口爲Nexx,其中xx爲數值,以00開頭。後一種格式用於通過網絡訪問的打印機,端口以\\開頭的本地打印機,端口名稱中有空格時它,並且當端口的名稱長度大於五時。* –

+0

不能保證第一臺定義的打印機是默認打印機。我已經看過幾種不同的機器,它有很大的不同。 – Hugh

回答

2

檢索默認打印機的推薦方法是使用Windows API GetDefaultPrinter() API而不是讀取註冊表。檢索所有打印機列表的推薦方法是使用EnumPrinters()。如果您修改代碼以使用Windows API而不是直接讀取註冊表,則它應該在Windows 7上可靠運行。

+0

感謝回覆。我知道推薦的方法。如果可能,我希望避免重寫第三方庫。 – Hugh

相關問題