Tôi cần lấy tên máy in mặc định. Tôi sẽ sử dụng C # nhưng tôi nghi ngờ đây là một câu hỏi khung nhiều hơn và không phải là ngôn ngữ cụ thể.
Tôi cần lấy tên máy in mặc định. Tôi sẽ sử dụng C # nhưng tôi nghi ngờ đây là một câu hỏi khung nhiều hơn và không phải là ngôn ngữ cụ thể.
Câu trả lời:
Cách dễ nhất mà tôi tìm thấy là tạo một PrinterSettingsđối tượng mới . Nó bắt đầu với tất cả các giá trị mặc định, vì vậy bạn có thể kiểm tra Tên của nó để lấy tên của máy in mặc định.
PrinterSettingsnằm trong System.Drawing.dll trong không gian tên System.Drawing.Printing.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
Ngoài ra, bạn có thể sử dụng PrinterSettings.InstalledPrintersphương pháp tĩnh để lấy danh sách tất cả các tên máy in, sau đó đặt thuộc tính PrinterName và kiểm tra IsDefaultPrinter . Tôi chưa thử điều này, nhưng tài liệu cho thấy nó sẽ không hoạt động. Rõ ràng IsDefaultPrinter chỉ đúng khi PrinterName không được đặt rõ ràng.
Một cách tiếp cận khác là sử dụng WMI (bạn sẽ cần thêm một tham chiếu đến hội đồng System.Management):
public static string GetDefaultPrinterName()
{
var query = new ObjectQuery("SELECT * FROM Win32_Printer");
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
if (((bool?) mo["Default"]) ?? false)
{
return mo["Name"] as string;
}
}
return null;
}
Nếu bạn chỉ muốn tên máy in không có lợi thế nào cả. Nhưng WMI có khả năng trả về một loạt các thuộc tính máy in khác:
using System;
using System.Management;
namespace Test
{
class Program
{
static void Main(string[] args)
{
ObjectQuery query = new ObjectQuery(
"Select * From Win32_Printer " +
"Where Default = True");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
Console.WriteLine(mo["Name"] + "\n");
foreach (PropertyData p in mo.Properties)
{
Console.WriteLine(p.Name );
}
}
}
}
}
và không chỉ máy in. Nếu bạn quan tâm đến bất kỳ loại dữ liệu nào liên quan đến máy tính, rất có thể bạn có thể lấy nó bằng WMI. WQL (phiên bản WMI của SQL) cũng là một trong những ưu điểm của nó.
Trong trường hợp này, tôi luôn sử dụng System.Printing.LocalPrintServer, giúp bạn có thể lấy được máy in là cục bộ, mạng hay fax.
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
hoặc sử dụng phương thức tĩnh GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
Cũng thử ví dụ này
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
PrintDialog đối tượng.PrinterName trống. điều này sẽ khiến đối tượng windows trả về tên máy in defualtMã:
Try
Dim _printDialog As New System.Windows.Forms.PrintDialog
xPrinterName = _printDialog.PrinterSettings.PrinterName '= "set as Default printer"
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("could not printed Label.", "Print Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try