1

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

我想做的事:

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

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

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

4

3 回答 3

2

在 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”打印到您在对话框中选择的打印机。

于 2011-12-19T15:55:53.187 回答
1

来自 Access 帮助:
以下示例使 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)
于 2011-12-19T16:16:35.343 回答
-1

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

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

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

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

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

于 2018-03-20T15:10:43.953 回答