it-swarm-vi.tech

Cách tốt nhất để có được máy in mặc định trong .NET

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 không chỉ là câu hỏi khung và không phải là ngôn ngữ cụ thể.

72
Kevin Gale

Cách dễ nhất tôi tìm thấy là tạo một đối tượng PrinterSettings 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 thuộc tính Tên của nó để lấy tên của máy in mặc định.

PrinterSettings nằ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 tĩnh PrinterSettings.InstalledPrinters phương thức để lấy danh sách tất cả các tên máy in, sau đó đặt thuộc tính Tên máy in và kiểm tra IsDefaultPrinter. Tôi đã không thử điều này, nhưng tài liệu dường như cho thấy nó sẽ không hoạt động. Rõ ràng IsDefaultPrinter chỉ đúng khi Tên máy in không được đặt rõ ràng.

114
OwenP

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 System.Manloyment Association):

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;
}
28
Nathan Baulch

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 liên quan đến máy tính nào, rất có thể bạn có thể lấy nó với WMI. WQL (phiên bản WMI của SQL) cũng là một trong những lợi thế của nó.

11
Uros Calakovic

Tôi luôn luôn sử dụng System.Printing.LocalPrintServer, trong đó cũng 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
9
Alexander Zwitbaum

Hãy thử ví dụ này

 PrinterSettings printerName = new PrinterSettings();

 string defaultPrinter;

 defaultPrinter = printerName.PrinterName;
1
Ramgy Borja
  • Đầu tiên tạo một thể hiện của đối tượng PrintDialog.
  • sau đó gọi đối tượng hộp thoại in và để trống PrinterName. điều này sẽ khiến đối tượng windows trả về tên máy in defualt
  • ghi chuỗi này vào chuỗi và sử dụng nó làm tên máy in khi bạn gọi thủ tục in

Mã số:

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
0
DieselDog

Điều này sẽ làm việc:

using System.Drawing.Printing;

PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;

0
Tahir