Как запустить приложение в невидимом режиме

Автор Борис_С, 8 декабря 2021, 13:06

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

Борис_С

Всем доброго дня.
Я запускаю приложение с помощью С# CLI.
Хотелось бы запускать его так, чтобы пользователь не видел его на экране.
Есть такая возможность?
Спасибо.


Борис_С

Там речь идет о LibreOffice и запуск из командной строки.
Я же запускаю приложение так:

                XComponentContext localContext = uno.util.Bootstrap.bootstrap();
                XMultiServiceFactory multiServiceFactory =
                    (XMultiServiceFactory)localContext.getServiceManager();
                XComponentLoader componentLoader = (XComponentLoader)
                    multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
                fileName = @"file:///" + fileName.Replace('\\', '/');

                //Открываем документ
                xComponent = componentLoader.loadComponentFromURL(
                    fileName, "_blank",
                    0, new unoidl.com.sun.star.beans.PropertyValue[0]);


rami

Последний параметр (new unoidl.com.sun.star.beans.PropertyValue[0]) — это массив структур, в который нужно передать параметр (-ы) документа.

Чтобы он открылся не видимым (код на Basic):
Dim param(0) As New com.sun.star.beans.PropertyValue
param(0).Name = "Hidden"
param(0).Value = true

xComponent = StarDeskTop.LoadComponentFromURL(fileName, "_blank", 0, param)


Измените под ваш код.

sokol92

Добрый день! Кто же может запретить играть вслепую?  :)

Я пробовал аналогичным образом вызывать LO из Excel VBA (или из VBS). Что-то получалось, что-то нет. Фундаментальных исследований не производил.

Если Вы открываете документ и не хотите, чтобы он был виден, то в списке опций (последний параметр loadComponentFromURL) указывайте опцию "Hidden" со значением True.

Совет. Сначала всё отладьте с опцией Hidden=False, а затем всё сохраните, глубоко вдохните, и запускайте со значением True.
Расскажите нам об успехах (или неудачах).
Владимир.

Борис_С

Все замечательно работает. Вот код на С# CLI:

                unoidl.com.sun.star.uno.XComponentContext localContext =
                    uno.util.Bootstrap.bootstrap();
                unoidl.com.sun.star.lang.XMultiServiceFactory multiServiceFactory =
                    (unoidl.com.sun.star.lang.XMultiServiceFactory)localContext.getServiceManager();
                XComponentLoader componentLoader = (XComponentLoader)
                    multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
                string fileName = "c:\\Users\\sbe.CSOFT-SPB\\Documents\\OO\\t1.ods";
                fileName = @"file:///" + fileName.Replace('\\', '/');
                unoidl.com.sun.star.beans.PropertyValue[] values =
                    new unoidl.com.sun.star.beans.PropertyValue[1];
                values[0] = new unoidl.com.sun.star.beans.PropertyValue();
                values[0].Name = "Hidden";
                values[0].Value = new uno.Any(false);

                XComponent xComponent = componentLoader.loadComponentFromURL(
                    fileName, "_blank",
                    0, values);

Борис_С

Небольшая помарка. Чтобы приложение открывалось невидимым, нужен такой оператор:

values[0].Value = new uno.Any(true);

sokol92

Цитата: Борис_С от  8 декабря 2021, 17:27Все замечательно работает
На начальном этапе - да.
Не всё может работать в невидимом режиме (надо пробовать).
Владимир.