2011-10-05 292 views
1

我有一个当前正在使用fhandlefile()过程的Access应用程序: http://access.mvps.org/access/api/api0018.htm ...打开任意文件。从Access VBA以只读方式打开任意文件

我希望能够像OpenFile(strFilePath,bolReadOnly)一样在自己的过程中包装该例程,以便可以根据需要以只读方式打开文件。但是,我没有看到那个Shell API调用中的任何地方,我可以做到这一点。我已经想到的(但有问题)两种可供选择的解决方案是:

  1. 变化只是在打开文件之前的文件属性为只读,然后打开它后改回正确的。这是一个奇怪的解决方案,不过因为用户必须拥有足够的权限才能做到这一点,这通常与整个“以只读方式打开文件”相矛盾。
  2. 使用依赖于文件类型的API以只读方式打开某些类型的文件(例如Word文档)。这是一个问题,因为我不想排除所有不同的文件类型,并且我希望尽可能远离额外的库。

任何人有任何想法如何我可以调整我现有的例程或用其他可以允许这样做的东西替代它?

回答

0

看着你调用它的API ...

  1. 试图利用该向ShellExecte调用打开使用默认的动词使用该文件,如果有打开。如果不是,则使用“打开”动词。

  2. 如果失败则尝试使用打开方式打开文件...对话框中看到How To Invoke the "Open With..." Dialog Box Using _shellexecute

这两种方法都使用与文件打开正确的应用程序相关的信息,但没有办法通过“只读”。我的猜测是,这是因为不是每个文件类型都有只读或甚至可写的上下文。

您可以选择在Web浏览器中打开文件。

例如(使用参考 “Microsoft Internet控制” 位于C通常发现:\ WINDOWS \ SYSTEM32 \ ieframe.dll)

Dim ie As InternetExplorer 
set ie = New InternetExplorer 

ie.Navigate "file://yourFile" 
ie.Visible = True 
+0

好主意!当我需要跳转到PDF中的特定页面时,我以前使用IE作为我的文件首选项,但是我从未想过这是一个只读文件查看器的事实。谢谢! – SteveShaffer