컴퓨터의 모든 프린터 목록을 얻는 방법


99

컴퓨터에 연결된 모든 프린터 목록을 가져와야합니까?

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

5

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

문서에 명시된대로 : System.Printing 네임 스페이스 내의 클래스는 Windows 서비스 또는 ASP.NET 응용 프로그램 또는 서비스 내에서 사용할 수 없습니다.


코드에 대한 설명을 추가 할 수 있습니까?
jhpratt 2017

이것은 매우 흥미로운 대답입니다. 이름 만 필요한 경우 허용되는 대답이 맞습니다. 다른 데이터가 필요한 경우 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.