从 C# 启动 Acrobat Reader 10.0:如何最小化?
Posted
技术标签:
【中文标题】从 C# 启动 Acrobat Reader 10.0:如何最小化?【英文标题】:Launching Acrobat Reader 10.0 from C#: how to minimize? 【发布时间】:2012-03-26 01:00:18 【问题描述】:我正在启动 Reader 10.0,以便从 Win 7 系统上的 C# 程序将 PDF 文件发送到打印机。这是我现在正在做的事情:
startInfo.FileName = adobeReaderPath;
string args = String.Format("/t \"0\" \"1\"", this.pdfFileName, this.printerName);
startInfo.Arguments = args;
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process process = Process.Start(startInfo);
我注意到像这样(或从命令提示符)启动 Reader 实际上会启动 2 个 AcroRd32.exe 可执行文件。它们都没有被最小化。我也尝试了 ProcessWindowStyle.Hidden ,结果相同。
有没有办法强制 Reader 开始最小化?
谢谢!
【问题讨论】:
你能否发布一个更完整的示例(就像你如何调用这个函数并从这里开始)因为我最近在 Win 7 上做了同样的事情并且只运行了 1 个实例。 【参考方案1】:启动进程后,可以获取它的MainWindowHandle,并使用P/Invoke将其最小化:
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
//..
ShowWindow(process.MainWindowHandle, 11); //11 is ForceMinimized
【讨论】:
既然有Adobe的内置函数来最小化启动它,为什么还要使用Win32 API:)? @Alex,如果他希望这更通用,Win32 API 是最好的选择。当然,该参数适用于 Adobe,但如果他需要它与 FoxIt 或其他应用程序一起使用怎么办? @Steve,我试过了,但这似乎对阅读器窗口没有影响,即在调用 ShowWindow 之后,窗口仍然没有最小化 您可能想尝试 pInvoke 链接中的其他 nCmdShow 参数之一。您可以尝试 2(显示最小化)或 0(隐藏) 不幸的是,同样的结果。 :( 这可能与 Acrobat 在进程启动时以某种方式启动两个 AcroRd32 进程有关。【参考方案2】:在你的命令行中加入/h
试试。这将启动一个最小化到任务栏的 Adobe Reader 实例。然而,没有“好的”选项可以完全隐藏它(据我所知)。除了用Win32 API
破解一些不可预测的东西。启动某些应用程序最小化的更通用方法是通过 API。请参阅史蒂夫的帖子。
应该这样做:
string args = String.Format("/h /t \"0\" \"1\"", this.pdfFileName, this.printerName);
【讨论】:
【参考方案3】:您实际上无法使用您提到的代码使用 Adobe acrobat reader 将 pdf 文档直接发送到打印机。
您需要的是一个 .net pdf api,它具有打印 pdf 的功能。您可以添加对项目的引用,然后开始使用 api。您可以在互联网上 google/bing 搜索同样免费且易于使用的 souch api。
【讨论】:
我做得相当成功。唯一的问题是弹出的烦人的阅读器窗口,我正在尝试将其最小化。 好的,由于打印结束后 AcroRd32.exe 一直在运行,您可以使用 Process 类通过 Process.GetProcessesByName("AcroRd32.exe") 的名称获取正在运行的进程 AcroRd32.exe 并杀死他们通过调用 Process 类实例的 Kill 方法。请记住,Process.GetProcessesByName 方法为您提供了一个 Process 实例数组,因此您需要通过调用 Kill 方法循环并终止该进程 我也已经这样做了。我只是想在进程启动时避免弹出窗口 好的,但我建议你使用 pdf .net api 来使用,因为它们比使用 adobe reader 更方便。有些 APIs 甚至不需要你在你的电脑上安装 adobe reader,而且速度也很快...... UDAY,您是否有一个特定的 API 可以同时提供其源代码?【参考方案4】:看到这个:http://www.robvanderwoude.com/commandlineswitches.php#Acrobat
打开一个 PDF 文件:
AcroRd32.exe PdfFile
在新的 Adobe Reader 实例中打开 PDF 文件:
AcroRd32.exe /N PdfFile
在第 7 页打开 PDF 文件:
AcroRd32.exe /A "page=7=OpenActions" PdfFile
在导航窗格处于活动状态时打开 PDF 文件,缩小到 50%,然后 搜索并突出显示单词“batch”:
AcroRd32.exe /A "zoom=50&navpanes=1=OpenActions&search=batch" PdfFile
打印带有对话框的 PDF 文件:
AcroRd32.exe /P PdfFile
静默打印 PDF 文件:
AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]
最后一个命令将打开一个新的 Adobe Reader 窗口,打印 PDF 文件,然后终止其窗口,除非该窗口恰好是 剩下的唯一一个 Adobe Reader 窗口:至少一个 Adobe Reader 窗口 将保持打开状态。
编辑: http://partners.adobe.com/public/developer/en/acrobat/PDFOpenParameters.pdf#page=5
【讨论】:
【参考方案5】:Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.Verb = "print";
proc.StartInfo.FileName = @"Path of Adobe exe";
proc.StartInfo.Arguments = String.Format(@"/p /h 0", fileToPrint);
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
【讨论】:
以上是关于从 C# 启动 Acrobat Reader 10.0:如何最小化?的主要内容,如果未能解决你的问题,请参考以下文章
教你在win10系统中手动更新Acrobat Reader的方法
JavaScript 在 Acrobat 中工作,但在 Reader 中不工作