一:获得本地安装的打印机列表
注:(如果在“设备和打印机”中已经添加了局域网的打印机设备,也算是本地安装的打印机;没有添加的则算作局域网打印机)
1,通过 C# 中 PrinterSettings 对象获取,如下,然后通过 foreach 即可遍历 printers;
PrinterSettings.StringCollection printers = System.Drawing.Printing.PrinterSettings.InstalledPrinters;
2,PrintHelper 类以及方法 GetEnumPrinters2,见文章最后部分;
1 PRINTER_INFO_2[] printers = PrintHelper.GetEnumPrinters2(); 2 foreach (PRINTER_INFO_2 printer in printers) 3 { 4 listBox1.Items.Add(printer.pPrinterName); 5 }
3,通过 ManagementObjectCollection (需要添加 System.Management 引用)来查询本地计算机中的打印机列表;
1 // 获取本地打印机列表 2 ManagementObjectCollection queryCollection; 3 string sql = "SELECT * FROM Win32_Printer"; 4 Dictionary<string, ManagementObject> dict = new Dictionary<string, ManagementObject>(); 5 ManagementObjectSearcher query = new ManagementObjectSearcher(sql); 6 queryCollection = query.Get(); 7 foreach (ManagementObject mo in queryCollection) 8 { 9 string oldName = mo["Name"].ToString(); 10 listBox1.Items.Add(oldName); 11 }
二:获取局域网打印机列表
1,PrintHelper 类以及方法 GetEnumPrinters2,见文章最后部分;
1 PRINTER_INFO_1[] printers = PrintHelper.GetEnumPrinters(); 2 foreach (PRINTER_INFO_1 printer in printers) 3 { 4 if (-1 == printer.pName.IndexOf("!!")) 5 { 6 listBox1.Items.Add(printer.pName); 7 } 8 else 9 { 10 uint pcbNeeded = 0; 11 uint pcReturned = 0; 12