Nosheen Javed
Nosheen Javed

Reputation: 175

Setting the default Printer for windows using c#

I want to set a default printer for windows/ system setting on a button click. I want to click on a button and want that a windows dialogue should appear asking user to set a default printer. Right now I am using the PrintDialog for this but it changes the printer every time I click on the button. I want to set the selected printer as a default one that should remain the same even if I close the application as well.

private void PrintSettingsBtn_Click(object sender, EventArgs e)
{
  PrintDialog PrintDialog = new PrintDialog();
  PrintDialog.ShowDialog();
  PrinterName = PrintDialog.PrinterSettings.PrinterName;
}

Upvotes: 3

Views: 21123

Answers (2)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186823

Try SetDefaultPrinter Windows API function

   using System.Runtime.InteropServices;

   ...

   [DllImport("winspool.drv", 
              CharSet = CharSet.Auto, 
              SetLastError = true)]
   [return: MarshalAs(UnmanagedType.Bool)]
   public static extern Boolean SetDefaultPrinter(String name);

   ...

   SetDefaultPrinter(PrinterName);

see

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162971(v=vs.85).aspx http://www.pinvoke.net/default.aspx/winspool/SetDefaultPrinter.html?diff=y

Upvotes: 10

AlexS
AlexS

Reputation: 136

Right click on the project in Solution Explorer, choose Properties. Select the Settings tab, add PrinterName setting.

In the code use the setting:

string PrinterName
{
    get { return (string)Properties.Settings.Default["PrinterName"]; }
    set 
    { 
        Properties.Settings.Default["PrinterName"] = value;
        Properties.Settings.Default.Save(); 
    }
}

private void print_Click(object sender, EventArgs e)
{
    PrintDialog pd = new PrintDialog();
    if (PrinterName != "")
        pd.PrinterSettings.PrinterName = PrinterName;
    if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // Print

        PrinterName = pd.PrinterSettings.PrinterName;
    }
}

Upvotes: 2

Related Questions