Есть ли способ запустить приложение формы c #, не показывая окно графического интерфейса (как консольное приложение) - PullRequest
1 голос
/ 23 февраля 2012

Есть ли способ запустить приложение на формах c # без отображения окна с графическим интерфейсом (например, консольное приложение). Я пытаюсь взять экранные шорты веб-страниц, загруженных в webkit.net control .

Все работает отлично, и я могу получить скриншоты, но если есть способ запустить приложение, не показывая окно, будет намного понятнее включить его в сценарии для автоматизации захвата веб-страницы.

Я пробовал: метод form.hide (), но кое-что, как он вообще ничего не скрывает.

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

В вашем приложении при создании нового приложения WinForms удалите Form1.cs и файл конструктора.

Тогда внутри основного метода Program.cs у вас есть следующий код:

  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new Form1());

Удалите эти строки и поставьте то, что вам нужно. Убедитесь, что метод Main никогда не вернется, если вы хотите, чтобы программа работала, добавив в нее какой-то цикл.

Вы также можете рассмотреть возможность создания NotifyIcon, чтобы ваша программа показывала значок уведомления в области уведомлений панели задач. Таким образом, вы можете добавить меню к значку уведомления, чтобы пользователь мог взаимодействовать и закрывать приложение.

2 голосов
/ 23 февраля 2012

Я не знаком с API webkit.net, но вы упомянули, что он предоставляет элемент управления Windows Forms.Существует System.Windows.Forms.Control.DrawToBitmap , который отображает элемент управления в растровое изображение.И не требуется помещать элемент управления в форму.

Используя подход Ойвинда Кноблоха-Бротена, пример Main метода будет выглядеть так:

static void Main()
{
    // Leave these lines here!
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // change this in order to use the webkit control
    Control ctrl = new Button { Width = 100, Height = 23, Text = "abc" };

    using (Bitmap bitmap = new Bitmap(ctrl.Width, ctrl.Height, PixelFormat.Format32bppRgb))
    {
        ctrl.DrawToBitmap(bitmap, new Rectangle(0, 0, ctrl.Width, ctrl.Height));
        bitmap.Save("test.png");
    }
}

Обратите внимание, что я использовалкнопка - вы должны изменить ее, чтобы нарисовать свой элемент управления webkit.net.

1 голос
/ 23 февраля 2012

Я думаю, что то, что вы хотите здесь сделать, может не поддерживаться API. Мое предложение - поискать в библиотеке WebKit какой-нибудь способ сделать скриншот без элемента управления WinForms.

Если вы хотите перейти по этому пути к решению, вы можете попробовать заменить Application.Run(new Form1()); в "Program.cs" следующим:

using (Form1 form = new Form1())
{
  form1.webKit1.DoScreenshot() // Just guessing on the API here
}

Я не могу гарантировать, что это действительно сработает. Или что он продолжит работать в новых будущих версиях webkit.net

0 голосов
/ 16 мая 2012

Крайне маловероятно, что вы сможете получить снимок экрана от стороннего элемента управления в своем собственном приложении, не видя его пользователю - если окно не видно на экране (не открывается, скрыто) , открытое за кадром или даже за чем-то другим), тогда оно просто не будет отображаться.

Если в веб-наборе есть специальный механизм для рендеринга в закадровое растровое изображение, вы можете использовать его для создания нужного изображения без показа элемента управления - или, как указал @Stephan, DrawToBitmap может работать. Кроме того, вы можете столкнуться со сложными задачами запуска приложения на скрытом рабочем столе или других хакерских атак.

...