【问题标题】:Launching Acrobat Reader 10.0 from C#: how to minimize?从 C# 启动 Acrobat Reader 10.0:如何最小化?
【发布时间】: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 个实例。

标签: c# acrobat minimized


【解决方案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 是最好的选择。当然,该参数适用于 Adob​​e,但如果他需要它与 FoxIt 或其他应用程序一起使用怎么办?
  • @Steve,我试过了,但这似乎对阅读器窗口没有影响,即在调用 ShowWindow 之后,窗口仍然没有最小化
  • 您可能想尝试 pInvoke 链接中的其他 nCmdShow 参数之一。您可以尝试 2(显示最小化)或 0(隐藏)
  • 不幸的是,同样的结果。 :( 这可能与 Acrobat 在进程启动时以某种方式启动两个 AcroRd32 进程有关。
【解决方案2】:

在你的命令行中加入/h 试试。这将启动一个最小化到任务栏的 Adob​​e Reader 实例。然而,没有“好的”选项可以完全隐藏它(据我所知)。除了用Win32 API 破解一些不可预测的东西。启动某些应用程序最小化的更通用方法是通过 API。请参阅史蒂夫的帖子。

应该这样做:

string args = String.Format("/h /t \"{0}\" \"{1}\"", this.pdfFileName, this.printerName);

【讨论】:

    【解决方案3】:

    您实际上无法使用您提到的代码使用 Adob​​e 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
    

    在新的 Adob​​e 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 ] ]
    

    最后一个命令将打开一个新的 Adob​​e Reader 窗口,打印 PDF 文件,然后终止其窗口,除非该窗口恰好是 剩下的唯一一个 Adob​​e Reader 窗口:至少一个 Adob​​e 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();
      

      【讨论】:

        猜你喜欢
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2020-07-24
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多