Solución:
- Obtenga la impresora predeterminada de
LocalPrintServer.DefaultPrintQueue
- Obtenga las impresoras instaladas (desde la perspectiva del usuario) de
PrinterSettings.InstalledPrinters
- Enumere a través de la lista:
- Cualquier impresora que comience con
\
es una impresora de red, así que consiga la cola connew PrintServer("\UNCPATH").GetPrintQueue("QueueName")
- Cualquier impresora que no comience con
\
es una impresora local, así que consígala conLocalPrintServer.GetQueue("Name")
- Puede ver cuál es el predeterminado comparando
FullName
propiedad.
Nota: una impresora de red puede ser la impresora predeterminada de LocalPrintServer.DefaultPrintQueue
, pero no aparecer en LocalPrintServer.GetPrintQueues()
// get available printers
LocalPrintServer printServer = new LocalPrintServer();
PrintQueue defaultPrintQueue = printServer.DefaultPrintQueue;
// get all printers installed (from the users perspective)he t
var printerNames = PrinterSettings.InstalledPrinters;
var availablePrinters = printerNames.Cast<string>().Select(printerName =>
{
var match = Regex.Match(printerName, @"(?<machine>\\.*?)\(?<queue>.*)");
PrintQueue queue;
if (match.Success)
{
queue = new PrintServer(match.Groups["machine"].Value).GetPrintQueue(match.Groups["queue"].Value);
}
else
{
queue = printServer.GetPrintQueue(printerName);
}
var capabilities = queue.GetPrintCapabilities();
return new AvailablePrinterInfo()
{
Name = printerName,
Default = queue.FullName == defaultPrintQueue.FullName,
Duplex = capabilities.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge),
Color = capabilities.OutputColorCapability.Contains(OutputColor.Color)
};
}).ToArray();
DefaultPrinter = AvailablePrinters.SingleOrDefault(x => x.Default);
utilizando la nueva API System.Printing
using (var printServer = new PrintServer(string.Format(@"\{0}", PrinterServerName)))
{
foreach (var queue in printServer.GetPrintQueues())
{
if (!queue.IsShared)
{
continue;
}
Debug.WriteLine(queue.Name);
}
}
encontré este código aquí
private void btnGetPrinters_Click(object sender, EventArgs e)
{
// Use the ObjectQuery to get the list of configured printers
System.Management.ObjectQuery oquery =
new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");
System.Management.ManagementObjectSearcher mosearcher =
new System.Management.ManagementObjectSearcher(oquery);
System.Management.ManagementObjectCollection moc = mosearcher.Get();
foreach (ManagementObject mo in moc)
{
System.Management.PropertyDataCollection pdc = mo.Properties;
foreach (System.Management.PropertyData pd in pdc)
{
if ((bool)mo["Network"])
{
cmbPrinters.Items.Add(mo[pd.Name]);
}
}
}
}
Actualizar:
“Esta función de API puede enumerar todos los recursos de red, incluidos servidores, estaciones de trabajo, impresoras, recursos compartidos, directorios remotos, etc.”
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=741&lngWId=10
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)