Bilgisayara bağlanan tüm yazıcıların listesini almam gerekiyor mu?
Bunu C #, WinForms'da nasıl yapabilirim?
Yanıtlar:
Bunu dene:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
MessageBox.Show(printer);
}
Yazıcının adından daha fazla bilgiye ihtiyacınız varsa, System.Management
bunları sorgulamak için API'yi kullanabilirsiniz :
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);
}
Statik System.Drawing.Printing.PrinterSettings.InstalledPrinters özelliğine bakın.
Sistemde yüklü tüm yazıcıların adlarının bir listesidir.
ASP.NET'te Ağ ve Yerel Yazıcı Listesini Alın
Bu yöntem, Windows Yönetim Araçları veya WMI arabirimini kullanır. Windows İşletim Sisteminde çalışan çeşitli sistemler (donanım) hakkında bilgi almak için kullanılan bir teknolojidir.
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());
}
}
Kaynak ve uygulama demosunu indirmek için burayı tıklayın
Ağ ve yerel yazıcıyı listeleyen uygulama demosu
LocalPrintServer sınıfını da kullanabilirsiniz. Bakınız: 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();
}
}
Dokümanlarda belirtildiği gibi: System.Printing ad alanındaki sınıflar, bir Windows hizmeti veya ASP.NET uygulaması veya hizmeti içinde kullanım için desteklenmez.
MVC C # ile çalışıyorsanız, yazıcılar ve açılır pencereler için seri bağlantı noktaları ile başa çıkmanın yolu budur.
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);
}
}