【问题标题】:VBA : Changing Windows 7 Default Printer temporarilyVBA:临时更改 Windows 7 默认打印机
【发布时间】:2012-01-23 17:32:11
【问题描述】:

是否有可能仅为一项“作业”更改 Windows 默认打印机?在 Windows XP / Vista / 7 下它是否可以在没有管理员权限的情况下工作?

我想做什么:

  • 默认打印机是 Canon ABC
  • 想通过 Epson XYZ 打印
  • 打印后希望再次恢复我的默认打印机 Canon ABC。

最好是在没有管理权限且没有“消息框”或 UI 对话框的情况下工作。

应该在 VBA 下使用或(勉强)在 C#/.NET 下使用

【问题讨论】:

  • 您尝试过什么来完成这项任务? VBA 是否只允许打印到默认打印机?
  • 哪个 VBA?版本和产品之间可能存在差异。
  • 基于 MS Access 2003 的应用程序(我认为是 VBA6),它应该使用定义的打印机(如 EPSON XYZ)仅执行一项作业(1 个打印作业),然后切换回默认打印机之前。
  • 您绝对不需要更改 默认 打印机即可打印到特定打印机。也不不应该您这样做。只需指示您的应用程序打印到特定的打印机,而不要使用默认打印机。您需要更具体地说明您使用的 VBA 版本,以便有人为您编写代码。

标签: c# vba printing default administrator


【解决方案1】:

在 C# 中,您可以打印到计算机上安装的任何打印机。您无需更改默认打印机。我不知道它在 VBA 中是否相同,但它在 C# 中有效。

编辑

由于您的评论,我添加了一个小示例,希望能够引导您前进:

public void DoPrint()
{
    var printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        var printDocument = new PrintDocument
            {
                DefaultPageSettings = { PrinterSettings = printDialog.PrinterSettings }
            };
        printDocument.PrintPage += OnPrintPage;
    }
}

private void OnPrintPage(object sender, PrintPageEventArgs e)
{
    e.Graphics.DrawString("Hello");
}

这将向您在对话框中选择的打印机打印“Hello”。

【讨论】:

  • 您是否有一些关于使用不同打印机打印作业的 sn-p 或有用的页面?我使用什么参数,我需要什么命名空间? (如果可能的话它应该只使用.NET 2.0,因为与Win2000兼容,没有SP的WinXP)
  • @DanielAlexanderWeigl:我在回答中添加了一些示例。
  • 感谢您的样品。这对我帮助很大。
【解决方案2】:

来自访问帮助:
以下示例将 Printers 集合中的第一台打印机设为系统的默认打印机,然后报告其名称、驱动程序信息和端口信息。

  Dim prtDefault As Printer
  dim strOldDefault as string
  strOldDefault = Application.printer

  Set Application.Printer = Application.Printers(0)

  Set prtDefault = Application.Printer

  With prtDefault
      MsgBox "Device name: " & .DeviceName & vbCr _
          & "Driver name: " & .DriverName & vbCr _
          & "Port: " & .Port
  End With

编辑:您可以在更改之前轻松保存默认打印机,并在打印后重新设置。另外,由于更改默认打印机是一个缓慢的过程,我建议您在更改之前检查默认打印机是什么,以避免不必要的更改。


保存/恢复:

Dim strOldPrinter As String
'save old printer'
strOldPrinter = Application.Printer.DeviceName
'....do stuff'
'restore old Printer'
Set Application.Printer = Application.Printers(strOldPrinter)

【讨论】:

  • 你是对的,如果它将覆盖默认打印机,那将是人间地狱:o 怎么样:“使用 EPSON ABC 报告“mybusinessreport”打印“会不会像 Application.Printers("Epson ABC")?
【解决方案3】:

由于您没有具体说明您的“工作”实际上是什么,我将在这里提供一个更简单的答案。

作为编程方法的替代方法,如果您特别尝试通过特定打印机打印特定的报告,MS Access 中有内置功能可以完成此操作。

只需选择报表的打印预览视图,然后选择:

页面设置 -> 页面选项卡 -> 使用特定打印机 -> 然后浏览并选择!

这最终满足了我的需求,所以希望它也能帮助你。

【讨论】:

  • 有人能解释一下为什么这篇文章被否决了吗?不需要代码的解决方案仍然是解决方案,OP 没有指定这些打印作业需要什么。
  • 我不知道为什么以及谁给了你一票。如果您让某人看到 Access 中提供的工具栏,则解决方案是可以的。几年前的主要问题是是否可以保存当前的默认打印机,将默认打印机更改为另一台设备,在此新设备上打印,然后重置为默认打印机。无需任何手动操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多