컴퓨터에 연결된 모든 프린터 목록을 가져와야합니까?
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();
}
}
문서에 명시된대로 : System.Printing 네임 스페이스 내의 클래스는 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);
}
}