There is a function in the unmanaged print function of the Spooler API winspool.drv . You can call the GetDefaultPrinter function to return the default printer name.
This is the P / Invoke signature for an unmanaged function:
[DllImport("winspool.drv", CharSet=CharSet.Auto, SetLastError=true)] private static extern bool GetDefaultPrinter( StringBuilder buffer, ref int bufferSize);
Use this function to determine if the default printer is installed:
public static bool IsDefaultPrinterAssigned() { //initialise size at 0, used to determine size of the buffer int size = 0; //for first call provide a null StringBuilder and 0 size to determine buffer size //return value will be false, as the call actually fails internally setting the size to the size of the buffer GetDefaultPrinter(null, ref size); if (size != 0) { //default printer set return true; } return false; }
Use this function to return the default printer name, returns an empty string if the default value is not set:
public static string GetDefaultPrinterName() { //initialise size at 0, used to determine size of the buffer int size = 0; //for first call provide a null StringBuilder and 0 size to determine buffer size //return value will be false, as the call actually fails internally setting the size to the size of the buffer GetDefaultPrinter(null, ref size); if (size == 0) { //no default printer set return ""; } StringBuilder printerNameStringBuilder = new StringBuilder(size); bool success = GetDefaultPrinter(printerNameStringBuilder, ref size); if (!success) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return printerNameStringBuilder.ToString(); }
Full code for testing in a console application:
using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Text; namespace DefaultPrinter { class Program { static void Main(string[] args) { Console.WriteLine(IsDefaultPrinterAssigned()); Console.WriteLine(GetDefaultPrinterName()); Console.ReadLine(); } [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool GetDefaultPrinter( StringBuilder buffer, ref int bufferSize); public static bool IsDefaultPrinterAssigned() {
source share