In de standaard PrintDialog zijn er vier waarden die aan een geselecteerde printer zijn gekoppeld: Status, Type, Where en Comment.
Als ik de naam van een printer weet, hoe kan ik deze waarden dan in C# 2.0 krijgen?
Antwoord 1, autoriteit 100%
Zoals dowski suggereerde, zou je WMI kunnen gebruiken om printereigenschappen ophalen. De volgende code toont alle eigenschappen voor een bepaalde printernaam. Onder hen vindt u: PrinterStatus, Opmerking, Locatie, DriverName, PortName, enz.
using System.Management;
…
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
try
{
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
}
catch (ManagementException ex)
{
Console.WriteLine(ex.Message);
}
}
Antwoord 2, autoriteit 32%
Dit zoumoeten werken.
using System.Drawing.Printing;
…
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
Daarna zijn de verschillende eigenschappenvan PrinterSettings kunnen worden gelezen.
Merk op dat ps.isValid()
kan zien of de printer daadwerkelijk bestaat.
Bewerken: nog een opmerking. Microsoft raadt u aan een PrintDocumenten wijzig de PrinterSettings in plaats van rechtstreeks een PrinterSettings aan te maken.
Antwoord 3, autoriteit 9%
Bekijk PrinterSettings.InstalledPrinters
Antwoord 4, autoriteit 5%
Ter referentie, hieris een lijst van alle beschikbare eigenschappen voor een printer ManagementObject.
usage: printer.Properties["PropName"].Value
Antwoord 5, autoriteit 4%
Het is lang geleden dat ik in een Windows-omgeving heb gewerkt, maar ik raad je aan om te kijken op met behulp van WMI.
Antwoord 6, autoriteit 4%
Houd er rekening mee dat het artikel waarnaar dowskien Panosverwezen (MSDN Win32_Printer) kan een beetje misleidend zijn.
Ik verwijs naar de eerste waarde van de meeste arrays. sommige beginnen met 1 en sommige beginnen met 0.
bijvoorbeeld, “ExtendedPrinterStatus” eerste waarde in tabel is 1, daarom zou uw array er ongeveer zo uit moeten zien:
string[] arrExtendedPrinterStatus = {
"","Other", "Unknown", "Idle", "Printing", "Warming Up",
"Stopped Printing", "Offline", "Paused", "Error", "Busy",
"Not Available", "Waiting", "Processing", "Initialization",
"Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};
en aan de andere kant, “ErrorState” eerste waarde in tabel is 0, daarom zou je array er ongeveer zo uit moeten zien:
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
BTW,
“PrinterState” is verouderd, maar u kunt “PrinterStatus” gebruiken.
Antwoord 7, autoriteit 3%
Ik weet dat het een oud bericht is, maar tegenwoordig is de gemakkelijkere/snellere optie om de verbeterde afdrukservices te gebruiken die worden aangeboden door het WPF-framework (bruikbaar door niet-WPF-apps).
http://msdn.microsoft .com/en-us/library/System.Printing(v=vs.110).aspx
Een voorbeeld om de status van de printerwachtrij en de eerste taak op te halen..
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
Antwoord 8
Als alternatief voor WMI kunt u snel nauwkeurige resultaten krijgen door op WinSpool.drv (d.w.z. Windows API) te tikken – u kunt alle details over de interfaces, structs & constanten van pinvoke.net, of ik heb de code samengesteld op http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html