Как использовать командную строку? | VBA. How to use Cmd. Function «Shell()», Object «WshShell» and others
Начинаю цикл тем о командной строке — чтобы зафиксировать полученный опыт для себя и других. Шапка темы (этот пост) будет обновляться — здесь будут фиксироваться готовые приёмы и задаваться очередные вопросы для последующего разбора в постах темы. Оставляю за собой право на ошибки и неточности. Прошу сообщать при их обнаружении. Function Shell()
VBA Excel. Функция Shell
Основных моменты: • не требует подключения дополнительных библиотек. Не помню, в какой из обязательных (для работы VBA) она находится. • возвращает ID запущенного процесса. Можно сравнить ответ функции с ID, указанным в "Подробностях" Диспетчера задач (на скринах ниже). • асинхронная. То есть, после ОТПРАВКИ команды на исполнение, код VBA продолжит работу НЕМЕДЛЕННО, не дожидаясь окончания выполнения. Практически никогда такое поведение не нужно и опасно. Фиксится использованием оболочки из API (покажу далее). В качестве универсального костыльного варианта — можно проверять ожидаемый итог исполнения команды (например, файлов в папке должно стать больше на один) в бесконечном цикле, пока итог не совпадёт. Как вы понимаете, применить этот костыль можно далеко не всегда. • второй параметр — видимость окна. Например, 0 (или vbHide) отвечает за его скрытие, а 1 (или vbNormalFocus) — за передачу фокуса (переключение). Если вам нужно просто выполнить команду, то используйте 0 (если вы вызываете приложение, то оно будет запущено и, немедленно, скрыто), а, если вам нужно работать с, например, приложением, запущенным по команде, через его (приложения) интерфейс — нужно передать фокус. • просто отправляет команду на исполнение. Никак не работает с ответом на команду. Пример разных вызовов штатного блокнота (путь должен существовать)
Функция для синхронизации Shell() с помощью API (x64 Only)
Пример вызова: Debug.Print PRDX_API_ShellAndWait("C:\WINDOWS\NOTEPAD.EXE", True, True)
|
Всего комментариев 1
Комментарии
-
andypetr (на Планете):n = Shell("C:\WINDOWS\NOTEPAD.EXE", vbHide)
Процесс notepad.exe продолжает выполняться, но без визуализации (Диспетчер задач - Подробности).Запись от Jack Famous размещена 22.05.2024 в 12:18