gpt4 book ai didi

Delphi - 使用参数打开 PDF,无需阅读器应用程序的默认路径

转载 作者:行者123 更新时间:2023-12-02 01:51:15 26 4
gpt4 key购买 nike

我在从 Delphi 打开 pdf 文件时遇到问题。我需要打开带有参数的pdf,因为我想为我的程序创建帮助手册。我尝试使用 shellExecute,但此功能需要阅读器 pdf 的路径。

procedure TForm3.Button2Click(Sender: TObject);
var e,s:String;
begin
s:='/A nameddest=somePlaceInPDF pathToMyFile.pdf';
e:='AcroRd32';
ShellExecute(handle,'open',pchar(e),pchar(s),nil,sw_show);
end;

程序可以运行,但这对我来说不是一个解决方案。有些用户可以使用其他 pdf 阅读器。您知道跳过添加阅读器路径的方法吗?

另一种方式是

if ShellExecute(handle,'open',pchar(e),pchar(s),nil,sw_show) < 32 then
begin
ShellExecute(0,0,'rundll32.exe','shell32.dll,OpenAs_RunDLL pathToMyFile.pdf',0,SW_SHOW);
end;

我认为,我需要某种方法,从 pdf 阅读器中提取路径。这是这个问题的最佳解决方案吗?

最佳答案

如果您希望将参数传递给可执行文件,那么您将忽略任何关联并要求存在特定的可执行文件。因为特定参数仅对一个特定的可执行文件有效。也就是说,Foxit 无法理解 Acrobat 的参数,反之亦然。

在这种情况下,您应该使用CreateProcess调用它。要查找 Acrobat Reader 的可执行文件,请参阅此问题:How to get Adobe Reader full path(including executable file name)?其他 PDF 程序也会有类似的方法。

<小时/>

ShellExecute 的真正意义在于它了解系统和用户对文件关联的偏好。 shell 知道应该使用哪个应用程序来打开不同的文件类型,以及在哪里可以找到该应用程序。

作为一个广泛的规则,如果您知道可执行文件的位置,请使用CreateProcess。如果您知道文档的位置并希望系统找到可执行文件,请使用ShellExecute(Ex)

因此,将 PDF 文件的完整路径传递给 ShellExecute 并让系统查找并打开关联的应用程序。

ShellExecute(0, 'open', PChar(PdfFileName), nil, nil, SW_SHOW);

如果您想进行正确的错误处理,请使用ShellExecuteEx。您还可以将 'open' 替换为 nil 并让系统选择默认操作。

关于Delphi - 使用参数打开 PDF,无需阅读器应用程序的默认路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30410327/

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