最近在論壇中不少網友問"如何把Windows安裝的所有打印機列出來",在下面的程序中我們將把系統中所安裝的打印機用列表框列出來,同時為默認打印機設置缺省值。
在下面的程序中我們用到了兩個主要的類,把所有的打印機列表出來用到了PrinterSettings 類,獲取系統默認打印機用到了PrintDocument 類,下面我們就動手實踐一下吧。
先新建一個windows form的工程,然後加入一個lable和一個comBox,就行啦,關鍵在下面啦,我們如何獲得默認打印機,就得用下面的語句。
PrintDocument prtdoc = new PrintDocument(); string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;//獲取默認的打印機名
有了默認的打印機,我們再把所有的打印機列出來。
PrinterSettings類有一個InstalledPrinters的屬性,不知是做什麼的吧,查MSDN如下解釋:
PrinterSettings.InstalledPrinters 獲取安裝在計算機上所有打印機的名稱。
在C#中如下定義:
[C#] [Serializable] [ComVisible(false)] public static PrinterSettings.StringCollection InstalledPrinters {get;}
屬性值
PrinterSettings.StringCollection,它表示安裝在計算機上所有打印機的名稱。
異常
異常類型 條件 Win32Exception 未能枚舉可用的打印機
備注
可以使用已安裝的打印機名稱的集合向用戶提供要打印到的打印機選擇。
下面的示例用已安裝的打印機填充 comboInstalledPrinters 組合框,並且還在選擇更改時使用 PrinterName 屬性設置用於打印的打印機。PopulateInstalledPrintersCombo 例程在窗體初始化時被調用。該示例假定存在名為 printDoc 的 PrintDocument 變量,並且存在特定的組合框。
[C#] //下面括號內的自己翻譯添加進去的 private void PopulateInstalledPrintersCombo() { // Add list of installed printers found to the combo box.(將系統中所有的打機加入列表框) // The pkInstalledPrinters string will be used to provide the display string.(列表框中顯示的字串由pkInstalledPrinters提供) foreach(String pkInstalledPrinters in PrinterSettings.InstalledPrinters) { comboInstalledPrinters.Items.Add(pkInstalledPrinters); } } private void comboInstalledPrinters_SelectionChanged(object sender, System.EventArgs e) { // Set the printer to a printer in the combo box when the selection changes.(當列表框改變時設置選擇的打印機) if (comboInstalledPrinters.SelectedIndex != -1) { // The combo box's Text property returns the selected item's text, which is the printer name.(將選擇的打印機名在列表框中顯示) printDoc.PrinterSettings.PrinterName= comboInstalledPrinters.Text; } }
看了MSDN的說明,懂多了吧,下面是我寫練習完整代碼:
//程序說明:將系統中的所有打印機在列表框中列出 //程序變量: PrintDocument prtdoc、string strDefaultPrinter //編寫人:蠶蛹([email protected]) //日期:2003-03-20 using System; using System.Drawing; using System.Drawing.Printing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace PrinterList { /// /// Form1 的摘要說明。 /// public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.ComboBox printerList; /// /// 必需的設計器變量。 /// private System.ComponentModel.Container components = null; public Form1() { // // Windows 窗體設計器支持所必需的 // InitializeComponent(); PrintDocument prtdoc = new PrintDocument(); string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;//獲取默認的打印機名 foreach(String strPrinter in PrinterSettings.InstalledPrinters) //在列表框中列出所有的打印機, { printerList.Items.Add(strPrinter); if (strPrinter == strDefaultPrinter)//把默認打印機設為缺省值 { printerList.SelectedIndex = printerList.Items.IndexOf(strPrinter); } } // // TODO: 在 InitializeComponent 調用後添加任何構造函數代碼 // } /// /// 清理所有正在使用的資源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// 設計器支持所需的方法 - 不要使用代碼編輯器修改 /// 此方法的內容。 /// private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.printerList = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(8, 24); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(72, 16); this.label1.TabIndex = 0; this.label1.Text = "選擇打印機:"; // // printerList // this.printerList.Location = new System.Drawing.Point(88, 22); this.printerList.Name = "printerList"; this.printerList.Size = new System.Drawing.Size(192, 21); this.printerList.TabIndex = 1; this.printerList.Text = "當前系統未裝打印機"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(288, 61); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.printerList, this.label1}); this.Name = "Form1"; this.Text = "打印機列表"; this.ResumeLayout(false); } #endregion /// /// 應用程序的主入口點。 /// [STAThread] static void Main() { Application.Run(new Form1()); } } }
以上代碼在windows xp + vc.net 下測試通過,編譯後在Windows98上測試通過