Открыть произвольный файл из Access VBA как доступный только для чтения

#shell #ms-access #vba

#оболочка #ms-access #vba

Вопрос:

У меня есть приложение Access, которое в настоящее время использует процедуру fhandlefile() здесь: http://access.mvps.org/access/api/api0018.htm …для открытия произвольных файлов.

Я хотел бы иметь возможность обернуть эту процедуру в свою собственную процедуру, такую как OpenFile(strFilePath, bolReadOnly), чтобы я мог открывать файлы только для чтения по мере необходимости. Однако я нигде не вижу в этом вызове API оболочки, где я мог бы это сделать. Два альтернативных решения, о которых я уже думал (но есть проблемы)::

  1. Измените атрибуты файла непосредственно перед открытием файла, чтобы он был доступен только для чтения, затем измените их обратно сразу после его открытия. Это странное решение, потому что пользователь должен иметь достаточные привилегии, чтобы сделать это, что обычно противоречит всему «открытию файла как доступного только для чтения».
  2. Используйте API, зависящие от типа файла, для открытия определенных типов файлов (например, документов Word) как доступных только для чтения. Это проблема, потому что я не хочу выделять все разные типы файлов, и я хочу держаться подальше от дополнительных библиотек, насколько это возможно.

У кого-нибудь есть какие-либо идеи о том, как я могу настроить свою существующую процедуру или заменить ее чем-то другим, что позволило бы это?

Ответ №1:

Глядя на API, который вы вызываете…

  1. Пытается открыть с помощью вызова ShellExecte для открытия файла с использованием используемого по умолчанию глагола, если таковой имеется. Если нет, используется глагол «открыть».

  2. Если это не удается, он пытается открыть файл с помощью диалогового окна Открыть с помощью … смотрите, как вызвать диалоговое окно «Открыть с помощью …» С помощью _shellexecute

Оба этих метода используют информацию, связанную с файлом, для открытия правильного приложения, но нет способа передать «Только для чтения». Я предполагаю, что это связано с тем, что не каждый тип файла имеет контекст только для чтения или даже для записи.

В качестве альтернативы вы можете открыть файл в веб-браузере.

Например (используя ссылку на «Microsoft Internet Controls», обычно находящуюся в c:windowssystem32ieframe.dll )

 Dim ie As InternetExplorer
set ie = New InternetExplorer

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

Комментарии:

1. Отличная идея! Я раньше использовал IE в качестве открывателя файлов, когда мне нужно было перейти к определенным страницам в PDF при открытии, но я никогда не задумывался о том, что это средство просмотра файлов только для чтения. Спасибо!