在WPF应用程序中更改默认打印机

4
我正在寻找在WPF应用程序中更改默认打印机的最佳方法。以下是我们希望该应用程序能够执行的步骤:
  1. 从下拉列表中选择一个位置,该位置映射到打印机名称。
  2. 更改默认打印机为映射名称。
  3. 启动IE并指向SSRS报告。
  4. 用户将从IE打印报告,这将使用新的默认打印机。
第二步是我需要帮助的地方。
这是否是WMI的用例?如果是,关于此主题的任何资源都将是巨大的帮助。
谢谢!
1个回答

9
请使用以下内容:
var query = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"); 
var printers = query.Get();
string printerName = "Printer to set as default" ;
foreach(ManagementObject printer in printers) 
{ 
   if (printer["name"].ToString() == printerName.ToString()) 
   { 
      printer.InvokeMethod("SetDefaultPrinter", new object[] { printerName }); 
   } 
}

我添加了对System.Management和System.Management.Instrumentation的引用,并添加了一个导入'using System.Management;'。但是,在'currentObject'和'InvokeMethod'下仍然出现错误行。我猜想'currentObject'实际上需要是'printer',但这仍然无法解决'InvokeMethod'问题。 - Nick Heidke
我在尝试调用打印机对象的InvokeMethod时遇到了错误:“System.Management.ManagementBaseObject”不包含“InvokeMethod”的定义,也没有接受类型为“System.Management.ManagementBaseObject”的第一个参数的扩展方法“InvokeMethod”可以找到(您是否缺少使用指令或程序集引用?) - Nick Heidke
啊,我们不能在这里使用“var printer”,因为它解析为没有可用InvokeMethod的ManagementBaseObject。当我将“var”更改为“ManagementObject”时,它可以正常工作。 - Nick Heidke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接