วิธีรับรายชื่อเครื่องพิมพ์ทั้งหมดในคอมพิวเตอร์


100

ฉันต้องการรายชื่อเครื่องพิมพ์ทั้งหมดที่เชื่อมต่อกับคอมพิวเตอร์หรือไม่

ฉันจะทำมันใน C #, WinForms ได้อย่างไร?

คำตอบ:



57

หากคุณต้องการข้อมูลมากกว่าเพียงแค่ชื่อเครื่องพิมพ์คุณสามารถใช้System.ManagementAPI เพื่อค้นหาได้:

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);
}


8

รับรายการเครือข่ายและเครื่องพิมพ์ภายในใน 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());
            }
        }

คลิกที่นี่เพื่อดาวน์โหลดแหล่งที่มาและการสาธิตแอปพลิเคชัน

การสาธิตแอปพลิเคชันที่แสดงเครือข่ายและเครื่องพิมพ์ท้องถิ่น

ป้อนคำอธิบายภาพที่นี่


การสาธิตของคุณใน ASP.NET ด้วยหรือไม่
AaA

6

คุณยังสามารถใช้คลาส 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


คุณสามารถเพิ่มคำอธิบายเพื่อไปพร้อมกับรหัสได้หรือไม่?
jhpratt

นี่เป็นคำตอบที่น่าสนใจมาก หากคุณต้องการเพียงชื่อคำตอบที่ยอมรับนั้นถูกต้อง หากคุณต้องการข้อมูลอื่น ๆ การใช้แบบสอบถามเพื่อ win32_Printer จะช้ากว่าการโทรนี้
Noman_1

0

หากคุณกำลังทำงานกับ 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);
        }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.