項目中,需要選擇打印機,切換打印機。demo如下(wpf應用程序):
Xaml:

<Window x:Class="PrintersApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <StackPanel> <ComboBox x:Name="printerComboBox"/> <Button Content="設置成打印機" Click="setDefaultPrintBtn"/> </StackPanel> </Grid> </Window>
打印機LocalPrinter類:

public class LocalPrinter { private static PrintDocument fPrintDocument = new PrintDocument(); //獲取本機默認打印機名稱 public static String DefaultPrinter() { return fPrintDocument.PrinterSettings.PrinterName; } public static List<String> GetLocalPrinters() { List<String> fPrinters = new List<String>(); fPrinters.Add(DefaultPrinter()); //默認打印機始終出現在列表的第一項 foreach (String fPrinterName in PrinterSettings.InstalledPrinters) { if (!fPrinters.Contains(fPrinterName)) { fPrinters.Add(fPrinterName); } } return fPrinters; } }
win api :

public class Externs { [DllImport("winspool.drv")] public static extern bool SetDefaultPrinter(String Name); //調用win api將指定名稱的打印機設置為默認打印機 }
邏輯代碼:

/// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitprinterComboBox(); //初始化打印機下拉列表選項 } private void InitprinterComboBox() { List<String> list = LocalPrinter.GetLocalPrinters(); //獲得系統中的打印機列表 foreach (String s in list) { printerComboBox.Items.Add(s); //將打印機名稱添加到下拉框中 } } private void setDefaultPrintBtn(object sender, RoutedEventArgs e) { if (printerComboBox.SelectedItem != null) //判斷是否有選中值 { if (Externs.SetDefaultPrinter(printerComboBox.SelectedItem.ToString())) //設置默認打印機 { MessageBox.Show(printerComboBox.SelectedItem.ToString() + "設置為默認打印機成功!"); } else { MessageBox.Show(printerComboBox.SelectedItem.ToString() + "設置為默認打印機失敗!"); } } } }
運行截圖:
下拉ComboBox,選擇要設置為默認的打印機,點擊“設置成默認打印機”按鈕,設置成功: