كيفية الحصول على معلومات الطابعة في .NET؟
-
08-07-2019 - |
سؤال
توجد في PrintDialog القياسي أربع قيم مرتبطة بالطابعة المحددة:الحالة والنوع والمكان والتعليق.
إذا كنت أعرف اسم الطابعة، فكيف يمكنني الحصول على هذه القيم في C# 2.0؟
المحلول
dowski اقترح ، يمكنك استخدام WMI ل الحصول على خصائص الطابعة. يعرض التعليمة البرمجية التالية عن خصائص اسم طابعة معينة. بين لهم أنك سوف تجد: PrinterStatus، تعليق، الموقع، DriverName، PortName، الخ
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);
}
}
نصائح أخرى
هذا يجب عمل.
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
وبعد ذلك المختلفة ملكيات يمكن قراءة إعدادات الطابعة.
لاحظ أن ps.isValid()
يمكن معرفة ما إذا كانت الطابعة موجودة بالفعل.
يحرر:تعليق إضافي واحد.توصي Microsoft باستخدام طباعة المستند وتعديل إعدادات الطابعة الخاصة بها بدلاً من إنشاء إعدادات الطابعة مباشرةً.
يرجى ملاحظة أن المادة التي دوسكي و بانوس كان يشير إلى (MSDN Win32_Printer) يمكن أن يكون مضللاً بعض الشيء.
أنا أشير إلى القيمة الأولى لمعظم المصفوفات.بعضها يبدأ بـ 1 والبعض يبدأ بـ 0.على سبيل المثال، "ExtendedPrinterStatus"القيمة الأولى في الجدول هي 1، لذلك يجب أن تكون المصفوفة كما يلي:
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"
};
ومن ناحية أخرى "حالة الخطأ"القيمة الأولى في الجدول هي 0، لذلك يجب أن تكون المصفوفة كما يلي:
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
راجع للشغل, "حالة الطابعة"قد عفا عليه الزمن، ولكن يمكنك استخدامه"حالة الطابعة".
وفقط للرجوع اليها، هنا هو قائمة بجميع الخصائص المتوفرة لManagementObject الطابعة.
usage: printer.Properties["PropName"].Value
ولقد مضى وقت طويل منذ أن كنت قد عملت في بيئة ويندوز، ولكن أود أن أقترح عليك أن ننظر إلى <لأ href = "http://msdn.microsoft.com/en-us/library/aa394363.aspx "يختلط =" noreferrer نوفولو "> باستخدام WMI .
وأنا أعلم أنه لنشر القديمة، ولكن في الوقت الحاضر أسهل / الخيار الاسرع هو استخدام خدمات الطباعة المحسنة التي يوفرها الإطار WPF (للاستخدام بواسطة التطبيقات غير WPF).
http://msdn.microsoft كوم / EN-US / مكتبة / System.Printing (ت = vs.110) .aspx اتصال
مثال لاسترداد وضع قائمة انتظار الطابعة والمهمة الأولى ..
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
وكبديل لWMI يمكنك الحصول على نتائج سريعة دقيقة عن طريق التنصت في لWinSpool.drv (أي ويندوز API) - يمكنك الحصول على كافة التفاصيل على واجهات البنيات والثوابت من pinvoke.net، أو لقد وضعت رمز معا في http://delradiesdev.blogspot.com /2012/02/accessing-printer-status-using-winspool.html