gpt4 book ai didi

c# - 如何确定 Adob​​e PDF 打印机所在的 "Ne"端口?

转载 作者:太空狗 更新时间:2023-10-30 00:57:22 25 4
gpt4 key购买 nike

如何检测打印机打开的端口(Ne01:、Ne02:、Ne99: 等)?

BigCorp 的计算机 (WinXP) 安装了 Adob​​e Acrobat(7.0 Pro 版),它提供了一个名为“Adobe PDF”的虚拟打印机。如果您在录制宏时将 Excel (2003) 工作簿打印为 pdf,则打印机的全名是“Nexx 上的 Adob​​e PDF:”,其中 xx 是两位数....并且不同取决于什么您尝试的计算机。

我使用 Excel.Interop 编写了一个 C# 控制台应用程序(我强烈反对其他任何人从这条通往 hell 的道路开始),它可以打开一系列电子表格。它在每个宏中运行一个宏,保存,打印为 pdf,然后将 pdf 移动到共享驱动器上的报告文件夹。

我面临的问题是,每次安装 Acrobat 似乎都会为 PDF 打印机选择一个随机端口号……我不知道如何获取它。

到目前为止,我已经尝试使用 Win32_Printer class像这样

var searcher = new ManagementObjectSearcher( @"SELECT * FROM Win32_Printer" );
foreach ( ManagementObject printer in searcher.Get() )
{
if ( Regex.IsMatch( printer["Name"].ToString(), @"(adobe|pdf)", RegexOptions.IgnoreCase ) )
{
//printer["Name"]; => "Adobe PDF"
//printer["PortName"] => "my documents/*.pdf"
foreach ( PropertyData pd in printer.Properties )
{
Console.WriteLine(string.Format("{0}, {1}", pd.Name, pd.Value));
}
break;
}
}

我还浏览了 System.Drawing.Printing 类。 PrinterSettings.InstalledPrinters将为您提供打印机名称“Adobe PDF”,但我不知道如何获取端口信息。

如果我只将“Adobe PDF”传递给 excel 互操作 PrintOut() 方法,它有时会工作,有时会失败并显示“文档无法打印”...我无法弄清楚原因。

如果我传递一个带有适当 x 值的硬编码“Adobe PDF on Ne0x:”,它每次都有效。

如果我尝试所有可能的变体,Excel 会帮助打印到默认打印机。我没有更改默认打印机的选项(安全策略限制)

谁能告诉我正确提取打印机端口的代码?

最佳答案

这是我最后做的

using Microsoft.Win32;
...

var devices = Registry.CurrentUser.OpenSubKey( @"Software\Microsoft\Windows NT\CurrentVersion\Devices" ); //Read-accessible even when using a locked-down account
string printerName = "Adobe PDF";

try
{

foreach ( string name in devices.GetValueNames() )
{
if ( Regex.IsMatch( name, printerName, RegexOptions.IgnoreCase ) )
{
var value = (String)devices.GetValue( name );
var port = Regex.Match( value, @"(Ne\d+:)", RegexOptions.IgnoreCase ).Value;
return printerName + " on " + port;
}
}
}
catch
{
throw;
}

关于c# - 如何确定 Adob​​e PDF 打印机所在的 "Ne"端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com