Так, для общего сведенияФункция
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
lpOperation –
String - операция, выполняемая с файлом. Может иметь следующие значения: «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) или значение опущено.
lpFile –
String – файл или папка, которую нужно открыть
lpParameters –
String – параметры открытия файла, т.ч. запуска приложения. Используется только при запуске приложений
lpDirectory –
String – рабочая директория
nShowCmd –
Long – параметры окна открытого файла (приложения, директории)
Параметры
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