耍酷的便当 · 国家国际发展合作署与秘鲁外交部签署合作文件-新华网· 2 月前 · |
重情义的香槟 · 盘点当代国画家中,未来谁能成为跻身亿元画家的 ...· 3 月前 · |
非常酷的打火机 · ADOBE ACROBAT XI ...· 9 月前 · |
兴奋的鞭炮 · 【有声漫画】泥巴啊哈原作《皇上吉祥》第二期_ ...· 1 年前 · |
忧郁的篮球 · 【武汉1年以下3万以下二手丰田FCV-R】武 ...· 1 年前 · |
我有一个问题,打开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);
耍酷的便当 · 国家国际发展合作署与秘鲁外交部签署合作文件-新华网 2 月前 |