【问题标题】:Change Default Printer within WPF Application在 WPF 应用程序中更改默认打印机
【发布时间】:2011-09-17 07:49:33
【问题描述】:

我正在寻找在 WPF 应用程序中更改默认打印机的最佳方法。以下是我们希望应用程序能够执行的步骤。

  1. 从映射到打印机名称的下拉列表中选择一个位置。
  2. 将默认打印机更改为映射名称。
  3. 启动 IE 并指向 SSRS 报告。
  4. 然后用户将从 IE 打印报告,IE 将使用新的默认打印机

第二步是我正在寻求帮助的。

这是 WMI 的用例吗?如果是这样,有关该主题的任何资源都会有很大帮助。

谢谢!

【问题讨论】:

    标签: c# wpf printing wmi


    【解决方案1】:

    使用这个:

    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 的引用,并添加了一个导入“使用 System.Management;”。但是,我仍然在“currentObject”和“InvokeMethod”下收到错误行。我猜 'currentObject' 实际需要是 'printer',但这仍然不能解决 'InvokeMethod' 问题。
    • 我在尝试在打印机对象上调用 InvokeMethod 时遇到错误:“System.Management.ManagementBaseObject”不包含“InvokeMethod”的定义,并且没有扩展方法“InvokeMethod”接受第一个参数可以找到“System.Management.ManagementBaseObject”类型的(您是否缺少 using 指令或程序集引用?)
    • 啊。我们不能在这里使用“var 打印机”,因为它解析为没有 InvokeMethod 可用的 ManagementBaseObject。当我将“var”更改为“ManagementObject”时,它工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多