Аналог WScript.Shell в LO

Автор Efim, 21 июня 2023, 15:28

0 Пользователи и 1 гость просматривают эту тему.

Efim

Требуется с помощью макроса в Libre Calc запустить другое приложение. В excel это делалось с помощью WScript.Shell Run. Существует ли какой-то аналог в Libre Calc?

bigor

Здравствуйте
Цитата: Efim от 21 июня 2023, 15:28WScript.Shell Run. Существует ли какой-то аналог в Libre Calc?
Shell(Pathname, Windowstyle, Param, bSync)

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Efim


Efim

Работает, но почему-то не реагирует на параметр Windowstyle, какой ни задам, всегда разворачивает окно и делает его активным.

mikekaganski

Цитата: Efim от 21 июня 2023, 19:26какой ни задам

А какой вы ни задавали?
Несмотря на многообразие вариантов в документации, реализованы только три.
С уважением,
Михаил Каганский

economist

@Efim, если запущенным приложением нужно гибко управлять (передавать параметры, выполнять свернуто, читать stderr, принудительно завершать, передавать нажатия клавиш итп) - рассмотрите вызов на LO Basic строки с методом invoke() скрипта на языке Python, в котором есть развитые методы os.popen() итп. Были примеры на Форуме. Пути для Python формируйте с прямым слешем, типа 'C:/Temp/start app.py'
Стандартный Shell() из LO Basic в части передачи параметров может потребовать длительных экспериментов и обкавычиваний.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Efim

Цитата: mikekaganski от 21 июня 2023, 20:00
Цитата: Efim от 21 июня 2023, 19:26какой ни задам

А какой вы ни задавали?
Несмотря на многообразие вариантов в документации, реализованы только три.
пробовал как в документации 0, 1, 2, 3, 4, 6, 10

Цитата: economist от 21 июня 2023, 21:22@Efim, если запущенным приложением нужно гибко управлять (передавать параметры, выполнять свернуто, читать stderr, принудительно завершать, передавать нажатия клавиш итп) - рассмотрите вызов на LO Basic строки с методом invoke() скрипта на языке Python, в котором есть развитые методы os.popen() итп. Были примеры на Форуме. Пути для Python формируйте с прямым слешем, типа 'C:/Temp/start app.py'
Стандартный Shell() из LO Basic в части передачи параметров может потребовать длительных экспериментов и обкавычиваний.
в принципе мне достаточно просто запустить приложение

mikekaganski

Цитата: Efim от 22 июня 2023, 08:56пробовал как в документации 0, 1, 2, 3, 4, 6, 10

Двойка у меня работает, например блокнот запускается свёрнутым:

Shell "notepad.exe", 2
С уважением,
Михаил Каганский

Efim

Цитата: mikekaganski от 22 июня 2023, 09:10Двойка у меня работает, например блокнот запускается свёрнутым:
Я под линуксом пытаюсь запустить. Под windows я сейчас попробовал, у меня тоже запускается свернутым как и положено.

mikekaganski

Цитата: Efim от 22 июня 2023, 09:28Я под линуксом пытаюсь запустить.

Ага, точно. Флаг osl_Process_MINIMIZED в коде используется только под Windows. Реализация osl_executeProcess под Linux игнорирует большинство возможных опций...
С уважением,
Михаил Каганский

economist

Под Linux можно попробовать запустить не само приложение, а bash-скрипт с вызовом приложения и флагом свернутости, решение наверняка существует и не одно. Ну и os.popen() от Python тоже возможен.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Цитата: economist от 22 июня 2023, 09:50Ну и os.popen() от Python тоже возможен

Насколько я вижу, никакие методы Python (ни os, ни subprocess) не предоставляют аргументов для контроля состояния окна запускаемого процесса. В принципе это логично - такие вещи должны зависеть от DE, которых много разных. Но в общем - сама архитектура Linux определяет, что это должно регулироваться аргументами командной строки самой программы (то есть программа запускается, анализирует свою строку и, если надо, сворачивается/разворачивается), а не флагами API запуска процесса.
С уважением,
Михаил Каганский

Efim

Цитата: economist от 22 июня 2023, 09:50Под Linux можно попробовать запустить не само приложение, а bash-скрипт с вызовом приложения и флагом свернутости
я тоже в этом направлении думаю, но пока что-то не получается