Reputation: 175
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
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
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