2012-06-19 50 views
2

我在做什麼:如何在C#中獲得唯一/不同的打印機型號名稱?

我正在創建一個安裝在計算機上的所有打印機的數據庫。

使用PrinterSetting.PrinterNamePrinterSettings.InstalledPrinters我得到PrinterName

我也試過winapi Win32_Printer但這和我上面的代碼有問題。

問題

的問題是,一臺打印機可通過像,HP LasetJet 1020(複製1),HP LasetJet 1020(副本2),依此類推HP LasetJet 1020不同的名稱來安裝。打印機名稱是用戶定義的,可以是任何。甚至可能有一臺打印機可以安裝2個不同的名稱,這兩個名稱之間沒有相似之處。

這就是爲什麼我認爲打印機型號名稱應該是唯一的,即使一臺打印機安裝的名稱不同也是如此。

問:

如何提取打印模式名稱?或者可以是Win_32中唯一,用戶不可編輯並可用於識別打印機的任何其他屬性。

可能是註冊表可能對此有所幫助。如果這個模型信息在註冊表中(很可能是它)在哪裏可以找到?

+2

如果用戶有兩臺相同的打印機實際連接?通常,如果用戶使用兩個不同的名稱設置打印機,那是因爲他們希望/需要將它們視爲邏輯上不同的設備。 –

+0

'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Print \ Printers'。在列出的打印機下查看這個子鍵 - 「PrinterDriverData」。 [我不確定這是否能解決您的問題。] AFAIK,打印機序列號/型號。沒有被供應商公開,'WIN32_Printers'會列出它作爲一個屬性。或者,你可以嘗試研究這個WIN32 API'SetupDiEnumDeviceInterfaces' –

+0

@Damien_The_Unbeliever:沒問題。這是一種情況是可能的。但首先甚至知道有兩臺相同的打印機需要了解他們的模型。 –

回答

1

打印機驅動器名稱和端口名的組合形成用於特定打印機的唯一的唯一標識符。如果驅動程序和端口名稱在兩臺打印機之間匹配,那麼這些打印機都代表相同的物理(或虛擬)硬件。沒有其他財產可靠地識別它們。