-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Функция API ShellExecute - описание и применение

Вторник, 15 Января 2019 г. 12:07 + в цитатник
Так, для общего сведения

Функция ShellExecute запускает программу по имени или по ассоциации с файлом документа.

Объявление
для VBA 6
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
      (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
      ByVal lpParameters As String, ByVal lpDirectory as String, _
      ByVal nShowCmd As Long) As Long

Для VBA 7
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
      (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
      ByVal lpParameters As String, ByVal lpDirectory As String, _
      ByVal nShowCmd As Long) As LongPtr 


Примечание. VBA 7 при компиляции сам присваивает нужный тип переменным LongPtr - Long для 32-х битных версий офиса и LongLong для 64-х битных.

Описание.
Функция находит имя программы, связанной с заданным файлом, и либо запускает программу с загрузкой данного файла, либо выводит файл на печать. Типы файлов обычно связывается с конкретными приложениями в реестре Windows. Например, текстовые файлы с расширением .TXT обычно ассоциируются с приложением Windows Notepad (NOTEPAD.EXE). Если передать этой функции любой файл с расширением .TXT, функция либо запускает программу Notepad, указывая имя файла в качестве параметра, либо выводит файл на печать.

Параметры.
hwnd - Long/LongLong - манипулятор окна (хендл). Идентификатор родительского окна. Указывать родительское окно не обязательно, можно просто 0
lpOperationString - операция, выполняемая с файлом. Может иметь следующие значения: «open», «print», «explore», «find», «edit».

Если lpOperation="find", функция выводит диалоговое окно для поиска файлов по условиям. Параметр lpFile должен указывать путь к папке, начиная с которой будет выполняться поиск. Остальные параметры не используются.

Если lpOperation="explore", функция выводит диалоговое окно - список папок. Параметр lpFile должен указывать путь к папке, содержимое которой нужно посмотреть. Остальные параметры не используются.

Если lpOperation="edit", функция открывает файл на редактирование, загружая приложение, ассоциированное с расширением файла. Параметр Edit должен содержать имя файла, параметр plDirectory - указывать путь к этому файлу; если параметр lpDirectory не используется, то параметр lpFile должен указывать путь и имя файла.

Если lpOperation="open", функция выполняет следующие действия: если в lpFile указан исполняемый файл (например, типа EXE), то он запускается на выполнение; загружаемой программе передаётся список параметров, указанных в lpParameters; в противном файл открывается на редактирование.

Если lpOperation="print", то выполняется печать файла на принтере (фактически загружается ассоциированное с расширением файла приложение, которое и печатает документ).

По умолчанию - "open", если указано Null (vbNullString) или значение опущено.

lpFileString – файл или папка, которую нужно открыть
lpParametersString – параметры открытия файла, т.ч. запуска приложения. Используется только при запуске приложений
lpDirectoryString – рабочая директория
nShowCmdLong – параметры окна открытого файла (приложения, директории)

Параметры lpOperation, lpParametrs и lpDirectory можно опускать

Параметр nShowCmd может иметь значения от 0 до 10. Наиболее часто используемые значения:

SW_HIDE = 0 - запускаемое приложение делается невидимым
SW_SHOWMAXIMIZED = 3 - развернутое (максимальное) окно;
SW_SHOWMINIMIZED = 2 - свернутое окно (значок) в панель задач;
SW_SHOWNORMAL = 1 - нормальное окно.

Более полный список параметров можно взять из описания функции ShowWindow

Если функция возвращает значение больше 32-х, то всё в порядке, иначе смотрите коды ошибок.

0 - Недостаточно памяти или ресурсов
SE_ERR_FNF = 2 - Указанный файл не найден (ERROR_FILE_NOT_FOUND)
SE_ERR_PNF = 3 - Указанный путь не существует (ERROR_PATH_NOT_FOUND)
SE_ERR_ACCESSDENIED = 5 - Операционная система не имеет доступа к указанному файлу
SE_ERR_OOM = 8 - Недостаточно памяти или ресурсов Windows
ERROR_BAD_FORMAT = 11 - Формат .EXE неверен (не-Win32 .EXE или ошибка в .EXE файле).
SE_ERR_SHARE = 26 - Произошла ошибка совместного доступа
SE_ERR_DDETIMEOUT = 28 - Операция DDE не была закончена, потому что истекло время запроса
SE_ERR_DDEFAIL = 29 - Операция ПРЯМОГО ВВОДА ДАННЫХ потерпела неудачу
SE_ERR_DDEBUSY = 30 - Операция ПРЯМОГО ВВОДА ДАННЫХ(DDE) не может работать, потому что другие действия ПРЯМОГО ВВОДА ДАННЫХ находятся в процессе
SE_ERR_NOASSOC = 31 - Нет никакого приложения, ассоциированного с расширением файла
SE_ERR_DLLNOTFOUND = 32 - Указанный файл DLL не найден

Пример использования

Private Declare Function ShellExecute Lib "shell32" _
        Alias "ShellExecuteA" (ByVal hwnd As Long, _
        ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL = 1

Private Sub btnSend_Click()
' запуск почтовика для отправки письма
  ShellExecute 0, vbNullString, _
     "mailto:nemiro_as@vbnet.ru", vbNullString, _
     vbNullString, SW_SHOWNORMAL
End Sub

Private Sub btnSite_Click()
' открытие сайта
   ShellExecute(0,'open','www.am.rusimport.ru',,,sw_shownormal);
End Sub



Примечание.
Как и у многих других функции WinAPI, у ShellExecute существует два варианта: ShellExecuteA и ShellExecuteW. A- и W-версии отличаются типом строк: A - ASCII, W - WCHAR (юникоде). Не путайте. В Access используется тип А.

Используемые материалы
Дан Эпплман - Win32 API и Visual Basic
Сайт Cybite.ru - \http://kbyte.ru/ru/Programming/Guides.aspx?id=193&mode=show
Сайт Тостер - https://toster.ru/q/195225
и вот здесь - http://platonov-andrei.narod.ru/Delphi/FuncAPI/ShellExecute.htm


Замечания по изложению есть?

-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?

https://www.sql.ru/forum/1307749/funkciya-api-shellexecute-opisanie-i-primenenie


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку