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

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

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

Борис_С

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

mikekaganski

С уважением,
Михаил Каганский

Борис_С

Там речь идет о 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Все замечательно работает
На начальном этапе - да.
Не всё может работать в невидимом режиме (надо пробовать).
Владимир.

Illar

Доброе утро!
Простите за пост в старой теме, но она соответствует вопросу. Никак не пойму, в чём ошибка:

Sub Sokrytie
    Dim Doc As Object
    Dim param(0) As New com.sun.star.beans.PropertyValue
    Dim sUrl, sInput As String
    sUrl="D:\Промо.ods"
    param(0).Name="Hidden"
    param(0).Value=True
    Doc=StarDesktop.LoadComponentFromURL(sUrl, "_blank", 0, param)
    Sheet=Doc.getByName("Лист1")
    Cell=Sheet.getCellByPosition(0,0)
    sInput=Cell.getString
    MsgBox sInput
End Sub

Текст ошибки:
"Ошибка времени выполнения Basic. Вызвано исключение
Type: com.sun.star.lang.IllegalArgumentException
Message: Unsupported URL <D:\Промо.ods>: "from LoadEnv::startLoading"."

mikekaganski

Текст ошибки недвусмысленно говорит, что "D:\Промо.ods" - не URL (совсем). Этот системный файловый путь нужно преобразовать в URL с помощью стандартной функции ConvertToURL (не пользуйтесь неправильными советами типа простой замены "\" на "/" - это не работает, как только имя Вашего файла усложнится: скажем, появятся пробелы, и не только).
С уважением,
Михаил Каганский

Illar

Цитата: mikekaganski от 29 октября 2024, 07:41Текст ошибки недвусмысленно говорит, что "D:\Промо.ods" - не URL (совсем). Этот системный файловый путь нужно преобразовать в URL с помощью стандартной функции ConvertToURL (не пользуйтесь неправильными советами типа простой замены "\" на "/" - это не работает, как только имя Вашего файла усложнится: скажем, появятся пробелы, и не только).
Всё получилось! Спасибо! Нужно было только направление, дельный совет, а дальше сам разобрался. Была ещё пара ошибок. Конечный результат здесь:
Sub Sokrytie
    Dim Doc As Object
    Dim param(0) As New com.sun.star.beans.PropertyValue
    Dim sUrl, sInput As String
    sUrl=ConvertToURL("D:/Промо.ods")
    param(0).Name="Hidden"
    param(0).Value=True
    Doc=StarDesktop.LoadComponentFromURL(sUrl, "_hidden", 0, param)
    Sheet=Doc.Sheets.getByName("Лист1")
    Cell=Sheet.getCellByPosition(0,0)
    sInput=Cell.getString
    MsgBox sInput
End Sub
Задача была простой: вывести в сообщении содержимое ячейки A1 первого листа обозначенного Calc-документа, не открывая его. Ещё раз спасибо, mikekaganski! ;)