是否有可能仅为一个“作业”更改 Windows 默认打印机?在 Windows XP / Vista / 7 下它是否可以在没有管理员权限的情况下工作?
我想做的事:
- 默认打印机是佳能 ABC
- 想通过 Epson XYZ 打印
- 打印后想再次恢复我的默认打印机 Canon ABC。
最好的情况是它可以在没有管理权限且没有“消息框”或 UI 对话框的情况下工作。
应该在 VBA 下使用或(勉强)在 C#/.NET 下使用
是否有可能仅为一个“作业”更改 Windows 默认打印机?在 Windows XP / Vista / 7 下它是否可以在没有管理员权限的情况下工作?
我想做的事:
最好的情况是它可以在没有管理权限且没有“消息框”或 UI 对话框的情况下工作。
应该在 VBA 下使用或(勉强)在 C#/.NET 下使用
在 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”打印到您在对话框中选择的打印机。
来自 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)
由于您没有具体说明您的“工作”实际上是什么,我将在这里提供一个更简单的答案。
作为编程方法的替代方法,如果您特别尝试通过特定打印机打印特定报告,则 MS Access 中有内置功能可以完成此操作。
只需选择报告的打印预览视图,然后选择:
页面设置 -> 页面选项卡 -> 使用特定打印机 -> 然后浏览并选择!
这最终满足了我的需求,所以希望它也能帮助你。