我想将 PDF 查看器作为不可见进程启动,将其强制放入控件中,然后再次显示。但观众似乎拒绝开始隐形。我已经尝试过这些启动参数:
ProcessStartInfo pdfViewerStartInfo = new ProcessStartInfo(ApplikationsName, "\"" + path + "\"");
pdfViewerStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pdfViewerStartInfo.RedirectStandardInput = true;
pdfViewerStartInfo.RedirectStandardOutput = false;
pdfViewerStartInfo.UseShellExecute = false;
pdfViewerStartInfo.CreateNoWindow = true;
我可以做些什么来强制查看器启动隐形(也许是 Win32 API)?
将 PDF 查看器作为不可见进程启动,然后将其强制进入控件,同时保持其不可见可能有点棘手,因为许多 PDF 查看器被设计为具有自己的窗口和用户界面的 GUI 应用程序。但是,您可以尝试几种不同的方法来实现您的目标:
使用无头 PDF 查看器: 如果您只需要从 PDF 中提取图像或文本而不将其显示给用户,请考虑使用无头 PDF 查看器,例如 pdftoppm(Poppler 库的一部分)或 MuPDF。这些命令行工具没有图形界面,因此它们可以在后台隐形运行。
使用 pdftoppm 将 PDF 页面转换为图像的示例:
ProcessStartInfo pdfToImageStartInfo = new ProcessStartInfo("pdftoppm", "\"" + path + "\" outputimage -png");
pdfToImageStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pdfToImageStartInfo.UseShellExecute = false;
pdfToImageStartInfo.CreateNoWindow = true;
Process pdfToImageProcess = new Process();
pdfToImageProcess.StartInfo = pdfToImageStartInfo;
pdfToImageProcess.Start();
pdfToImageProcess.WaitForExit();
在您的应用程序中嵌入 PDF 查看器控件: 如果要在应用程序中显示 PDF 内容,可以使用 PDF 查看器库或控件,允许将 PDF 查看器直接嵌入到应用程序的用户界面中。这样,您可以控制其在应用程序窗口中的可见性和位置。
提供 PDF 查看控件的库示例:
Adobe PDF Reader 控件(ActiveX):如果安装了 Adobe Acrobat Reader,则可以使用 Adobe Acrobat Reader ActiveX 控件。 PDF.js:用于在网页中呈现 PDF 的 JavaScript 库。您可以在应用程序中嵌入 Web 浏览器控件以使用 PDF.js 显示 PDF。 使用 Win32 API 进行窗口操作: 如果您必须使用现有的 PDF 查看器并希望操纵其窗口可见性,则可以使用 Win32 API 函数(如 ShowWindow 和 SetWindowPos)来控制 PDF 查看器窗口的可见性和位置。这是一种更高级的方法,需要了解 Win32 API 和进程间通信。
以下是使用 Win32 API 隐藏窗口的示例:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main()
{
Process[] processes = Process.GetProcessesByName("YourPDFViewerProcessName");
if (processes.Length > 0)
{
IntPtr hWnd = processes[0].MainWindowHandle;
ShowWindow(hWnd, 0); // 0 hides the window
}
}
}
请记住将“YourPDFViewerProcessName”替换为您要操作的 PDF 查看器进程的实际名称。
请记住,使用 Win32 API 操作外部进程窗口的可见性可能很复杂,并且可能无法与所有 PDF 查看器完美配合。如果可能的话,使用 PDF 查看器控件或无头 PDF 工具通常更容易、更可靠。