[.net] .NET에서 기본 프린터를 얻는 가장 좋은 방법은 무엇입니까?

기본 프린터 이름을 가져와야합니다. 나는 C #을 사용할 것이지만 이것이 프레임 워크 질문에 더 가깝고 언어별로 다르지 않다고 생각합니다.



답변

내가 찾은 가장 쉬운 방법은 새 PrinterSettings개체 를 만드는 것 입니다. 모든 기본값으로 시작하므로 이름을 확인할 수 있습니다. 속성을 하여 기본 프린터의 이름을 가져올 수 있습니다.

PrinterSettings네임 스페이스의 System.Drawing.dll에 있습니다 System.Drawing.Printing.

PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);

또는 정적 PrinterSettings.InstalledPrinters메서드를 사용하여 모든 프린터 이름 목록을 가져온 다음 PrinterName 속성 을 설정 하고 IsDefaultPrinter를 확인할 수 있습니다. 나는 이것을 시도하지 않았지만 문서는 그것이 작동하지 않을 것이라고 제안하는 것 같습니다. 분명히 IsDefaultPrinterPrinterName 이 명시 적으로 설정되지 않은 경우에만 true 입니다.


답변

또 다른 방법은 WMI를 사용하는 것입니다 (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;
}


답변

프린터 이름을 원하면 전혀 이점이 없습니다. 그러나 WMI는 다른 프린터 속성 전체를 반환 할 수 있습니다.

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 );
                }
            }
        }
    }
}

프린터 뿐만이 아닙니다. 컴퓨터 관련 데이터에 관심이 있다면 WMI를 통해 얻을 수 있습니다. WQL (SQL의 WMI 버전)도 장점 중 하나입니다.


답변

이 경우 항상 System.Printing.LocalPrintServer를 사용하므로 프린터가 로컬, 네트워크 또는 팩스인지 여부도 확인할 수 있습니다.

string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
  defaultPrinter = printServer.DefaultPrintQueue.FullName);
}

또는 정적 메서드 GetDefaultPrintQueue 사용

LocalPrintServer.GetDefaultPrintQueue().FullName


답변

이 예제도 시도하십시오

 PrinterSettings printerName = new PrinterSettings();

 string defaultPrinter;

 defaultPrinter = printerName.PrinterName;


답변

이것은 작동합니다.

using System.Drawing.Printing;

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


답변

  • 먼저 인스턴스를 만듭니다. PrintDialog 개체 .
  • 그런 다음 인쇄 대화 상자 개체를 호출하고 PrinterName . 이렇게하면 Windows 개체가 기본 프린터 이름을 반환합니다.
  • 이것을 문자열에 쓰고 인쇄 절차를 호출 할 때 프린터 이름으로 사용합니다.

암호:

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