ฉันต้องการรายชื่อเครื่องพิมพ์ทั้งหมดที่เชื่อมต่อกับคอมพิวเตอร์หรือไม่
ฉันจะทำมันใน C #, WinForms ได้อย่างไร?
ฉันต้องการรายชื่อเครื่องพิมพ์ทั้งหมดที่เชื่อมต่อกับคอมพิวเตอร์หรือไม่
ฉันจะทำมันใน C #, WinForms ได้อย่างไร?
คำตอบ:
ลองสิ่งนี้:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
MessageBox.Show(printer);
}
หากคุณต้องการข้อมูลมากกว่าเพียงแค่ชื่อเครื่องพิมพ์คุณสามารถใช้System.Management
API เพื่อค้นหาได้:
var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer");
foreach (var printer in printerQuery.Get())
{
var name = printer.GetPropertyValue("Name");
var status = printer.GetPropertyValue("Status");
var isDefault = printer.GetPropertyValue("Default");
var isNetworkPrinter = printer.GetPropertyValue("Network");
Console.WriteLine("{0} (Status: {1}, Default: {2}, Network: {3}",
name, status, isDefault, isNetworkPrinter);
}
ดูที่คุณสมบัติSystem.Drawing.Printing.PrinterSettings.InstalledPrintersแบบคงที่
เป็นรายชื่อเครื่องพิมพ์ที่ติดตั้งทั้งหมดในระบบ
รับรายการเครือข่ายและเครื่องพิมพ์ภายในใน ASP.NET
วิธีนี้ใช้ Windows Management Instrumentation หรืออินเทอร์เฟซ WMI เป็นเทคโนโลยีที่ใช้เพื่อรับข้อมูลเกี่ยวกับระบบต่างๆ (ฮาร์ดแวร์) ที่ทำงานบนระบบปฏิบัติการ Windows
private void GetAllPrinterList()
{
ManagementScope objScope = new ManagementScope(ManagementPath.DefaultPath); //For the local Access
objScope.Connect();
SelectQuery selectQuery = new SelectQuery();
selectQuery.QueryString = "Select * from win32_Printer";
ManagementObjectSearcher MOS = new ManagementObjectSearcher(objScope, selectQuery);
ManagementObjectCollection MOC = MOS.Get();
foreach (ManagementObject mo in MOC)
{
lstPrinterList.Items.Add(mo["Name"].ToString());
}
}
คลิกที่นี่เพื่อดาวน์โหลดแหล่งที่มาและการสาธิตแอปพลิเคชัน
การสาธิตแอปพลิเคชันที่แสดงเครือข่ายและเครื่องพิมพ์ท้องถิ่น
คุณยังสามารถใช้คลาส LocalPrintServer โปรดดูที่System.Printing.LocalPrintServer
public List<string> InstalledPrinters
{
get
{
return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
EnumeratedPrintQueueTypes.Connections }).ToList()
select printer.Name).ToList();
}
}
ตามที่ระบุไว้ในเอกสาร: คลาสภายในระบบไม่รองรับการพิมพ์เนมสเปซสำหรับการใช้งานภายในบริการ Windows หรือแอปพลิเคชันหรือบริการ ASP.NET
หากคุณกำลังทำงานกับ MVC C # นี่คือวิธีจัดการกับเครื่องพิมพ์และพอร์ตอนุกรมสำหรับดรอปดาวน์
using System.Collections.Generic;
using System.Linq;
using System.IO.Ports;
using System.Drawing.Printing;
public class Miclass
{
private void AllViews()
{
List<PortClass> ports = new List<PortClass>();
List<Printersclass> Printersfor = new List<Printersclass>();
string[] portnames = SerialPort.GetPortNames();
/*PORTS*/
for (int i = 0; i < portnames.Count(); i++)
{
ports.Add(new PortClass() { Name = portnames[i].Trim(), Desc = portnames[i].Trim() });
}
/*PRINTER*/
for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
{
Printersfor.Add(new Printersclass() { Name = PrinterSettings.InstalledPrinters[i].Trim(), Desc = PrinterSettings.InstalledPrinters[i].Trim() });
}
}
}
public class PortClass
{
public string Name { get; set; }
public string Desc { get; set; }
public override string ToString()
{
return string.Format("{0} ({1})", Name, Desc);
}
}
public class Printersclass
{
public string Name { get; set; }
public string Desc { get; set; }
public override string ToString()
{
return string.Format("{0} ({1})", Name, Desc);
}
}