Открытие файла ассоциированным приложением с помощью Avenue

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/hotlink-anytype.html


Скрипт на Avenue использующий системные ассоциации типов файлов.

Задача: Открыть с помощью скрипта Avenue с помощью инструмента горячей связи (hotlink) документы MS Word, Excel и любые другие, для которых в операционной системе настроена ассоциированная программа (txt - Notepad, dbf - Excel и т.д.). Наличие ассоциации означает, что операционная система "знает", какой программой открывать файл данного типа.

Для использования связи такого типа, необходимо создать следующий скрипт и подключить его как User Script к теме и полю, в котором будет прописан полный путь к нужному файлу.

Содержание скрипта:

'fname - полный путь к файлу типа Filename
fname = SELF
shellDLL = DLL.Make(FileName.FindInSystemSearchPath("SHELL32.dll"))
execProc = DLLProc.Make(shellDLL, "ShellExecuteA", #DLLPROC_TYPE_INT32, {#DLLPROC_TYPE_INT32, #DLLPROC_TYPE_STR, #DLLPROC_TYPE_STR, #DLLPROC_TYPE_STR, #DLLPROC_TYPE_STR, #DLLPROC_TYPE_INT32})
execProc.Call({0,"OPEN",fname,"","",4})

Данный способ достаточно универсален, но для некоторых типов файлов, точнее программ с ними ассоциированных, не работает. Примером является Google Earth 4 и ассоциируемые с ними файлы kml и kmz. Чтобы решить эту проблему, необходимо в свойствах файла googleearth.exe (Properties\Compatibility\Run this program in compatibility mode) в параметрах совместимости выбрать систему Windows NT. Иначе, возможно появление следующего сообщения об ошибке:

Hotlink-anytype-01.gif

Еще одним способом борьбы с ошибками открытия ассоциированных программ является предварительное открытие их, перед использованием расширения.