![]() |
严肃的青蛙 · 杭州、成都、北京再现“抢地潮” ...· 4 月前 · |
![]() |
霸气的夕阳 · ILLUSION - 萌娘百科 ...· 4 月前 · |
![]() |
愉快的包子 · 夫君要送我去敌国当内奸,可我却听见了他的心声 ...· 5 月前 · |
![]() |
急躁的伏特加 · 2023-2024四区月考划线出炉!期中考时 ...· 10 月前 · |
![]() |
阳刚的雪糕 · 衡阳市参加全省脱贫攻坚总结表彰评选公示-通知 ...· 11 月前 · |
我有一个问题,打开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阅读器中提取路径。这是解决这个问题的最好办法吗?
发布于 2015-05-25 15:10:59
这是对我问题最好的回答。
procedure TForm3.Button2Click(Sender: TObject);
var s, result:String;
path: array[0..250] of char
begin
s:='/A nameddest=somePlaceInPDF "pathToMyFile.pdf"';
FindExecutable('pathToMyFile.pdf',nil,path);
result := trim(StrPas(path));
ShellExecute(handle,nil,pchar(result),pchar(s),nil,sw_show);
end
发布于 2015-05-23 08:18:30
如果希望将参数传递给可执行文件,则将忽略任何关联,并要求存在特定的可执行文件。因为特定的参数只对一个特定的可执行文件有效。也就是说,Foxit不理解Acrobat的参数,反之亦然。
在这种情况下,您应该使用
CreateProcess
调用它。要找到Acrobat的可执行文件,请参考以下问题:
如何获得Adobe完整路径(包括可执行文件名)?
对于其他PDF程序也有类似的方法。
ShellExecute
的真正意义在于它理解文件关联的系统和用户首选项。shell知道应该使用哪个应用程序打开不同的文件类型,以及在哪里找到该应用程序。
一般来说,如果您知道可执行文件的位置,请使用
CreateProcess
。如果您知道文档的位置并希望系统找到可执行文件,请使用
ShellExecute(Ex)
。
因此,将PDF文件的完整路径传递给
ShellExecute
,让系统找到并打开相关的应用程序。
ShellExecute(0, 'open', PChar(PdfFileName), nil, nil, SW_SHOW);
如果您希望有正确的错误处理,请使用
ShellExecuteEx
。您还可以将
'open'
替换为
nil
,并让系统选择默认操作。
发布于 2016-02-09 01:50:06
pdf文件可能与另一个程序相关联,因此"FindExecutable“并不是找到已安装的Acrobat程序的可靠方法。我使用注册表项: HKEY_CLASSES_ROOT\Software\Adobe\Acrobat\Exe
procedure TfrmFsYtd.btnPdfHelpTestClick(Sender: TObject);
var strAcro, strParam:string;
Registry: TRegistry;
begin
// Get the users' installed Adobe Reader from the registry >>
Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_CLASSES_ROOT;
Registry.OpenKey('Software\Adobe\Acrobat\Exe',False);
![]() |
霸气的夕阳 · ILLUSION - 萌娘百科 万物皆可萌的百科全书 4 月前 |