|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
Так, для общего сведения Функция ShellExecute запускает программу по имени или по ассоциации с файлом документа. Объявление для VBA 6 Код: vbnet 1. 2. 3. 4.
Для VBA 7 Код: vbnet 1. 2. 3. 4.
Примечание. 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 не найден Пример использования Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Примечание. Как и у многих других функции 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-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 12:07 |
|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
Проще и с тем же результатом: Код: vbnet 1. 2.
Плюс, можно указать ожидание закрытия приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 13:32 |
|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
JossЗамечания по изложению есть?1) Для lpOperation="edit" | "print" я бы добавил сведения о том, что происходит при отсутствии ассоциации. 2) При lpOperation="open" точно так же, как и для edit, обрабатывается ассоциация. Понятно, что менять ассоциацию для exefile дураков нет, но вот для иных типов исполняемых файлов - запросто. Да и наоборот - ничто не мешает ассоциировать любое расширение с исполняемым типом, и файл с ним именно запустится на исполнение как экзешник. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 13:44 |
|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
Кривцов АнатолийПроще и с тем же результатом: Код: vbnet 1. 2.
Плюс, можно указать ожидание закрытия приложения. А как Вы реализуете вот такую вещь? Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 15:44 |
|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
Вопрос снимается. Запустилось Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 15:56 |
|
Функция API ShellExecute - описание и применение
|
|||
---|---|---|---|
#18+
AkinaJossЗамечания по изложению есть?1) Для lpOperation="edit" | "print" я бы добавил сведения о том, что происходит при отсутствии ассоциации. 2) При lpOperation="open" точно так же, как и для edit, обрабатывается ассоциация. Понятно, что менять ассоциацию для exefile дураков нет, но вот для иных типов исполняемых файлов - запросто. Да и наоборот - ничто не мешает ассоциировать любое расширение с исполняемым типом, и файл с ним именно запустится на исполнение как экзешник. Вообще-то это функция и её вызов можно оформить вот так Код: vbnet 1. 2.
Анализируешь переменную Х. Больше 32 - всё в порядке. Список ошибок я дал. При отсутствии ассоциации Х=31. У меня так выдало. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 16:05 |
|
|
start [/forum/topic.php?fid=45&fpage=37&tid=1610910]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 464ms |
0 / 0 |