Как мне установить принтер Windows по умолчанию в C#?
Как мне установить принтер Windows по умолчанию в C#.NET?
5 ответов
Решение
Использование SetDefaultPrinter Windows API.
using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private void listAllPrinters()
{
foreach (var item in PrinterSettings.InstalledPrinters)
{
this.listBox1.Items.Add(item.ToString());
}
}
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
string pname = this.listBox1.SelectedItem.ToString();
myPrinters.SetDefaultPrinter(pname);
}
public Form1()
{
InitializeComponent();
listAllPrinters();
}
}
public static class myPrinters
{
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetDefaultPrinter(string Name);
}
}
Шаг 1: Вставьте следующий код в любом месте вашего файла.cs
public static class PrinterClass
{
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetDefaultPrinter(string Printer);
}
Шаг 2: Добавьте необходимое пространство имен, т.е.
using System.Runtime.InteropServices;
Шаг 3: Используйте следующую функцию, чтобы установить нужный принтер в качестве принтера по умолчанию.
PrinterClass.SetDefaultPrinter("Paste your desired Printer Name here");
Шаг 4: Чтобы получить список всех принтеров, подключенных к вашему ПК, вы можете использовать этот код.
private void FillListBox()
{
foreach (var p in PrinterSettings.InstalledPrinters)
{
cmbdefaultPrinter.Properties.Items.Add(p);
}
}
//Here cmbdefaultPrinter is a combobox, you can fill the values into a list.
Пространства имен, необходимые для приведенного выше кода:
using System.Drawing.Printing;
using System.Runtime.InteropServices;
Вот как это можно сделать с помощью C# .NET без использования Win32API в рамках приложения.NET. Подход Win32API сохраняет принтер по умолчанию после закрытия приложения.
using System.Drawing.Printing;
namespace MyNamespace
{
public class MyPrintManager
{
public static PrinterSettings MyPrinterSettings = new PrinterSettings();
public static string Default_PrinterName
{
get
{
return MyPrinterSettings.PrinterName;
}
set
{
MyPrinterSettings.DefaultPageSettings.PrinterSettings.PrinterName = value;
MyPrinterSettings.PrinterName = value;
}
}
}
}
Вы также можете использовать WMI.
http://cheeso.members.winisp.net/srcview.aspx?file=printer.cs