Как встроить программу в Windows

Есть такие сайты, которые пользователи ПК открывают сразу же с включением компьютера, например сайты социальных сетей, чтобы вести переписку, сайт электронной почты, чтобы оперировать с письмами, YouTube и т.д. Чтобы их случайно не закрыть вместе с браузером, многие прибегают к тому, что открывают каждый сайт в новом окне браузера. Это не очень удобно, так как на панели задач постоянно приходиться выбирать, какое же окно сейчас развернуть или свернуть. А если держать эти сайты, открытые во вкладках, они постоянно мешаются. Гораздо удобнее было если каждый такой сайт можно было превратить в отдельную программу, со своим размером окна и пользоваться как отдельным приложением и это теперь возможно сделать всего за пару минут.

Для этого необходимо сначала скачать новый браузер от Майкрософт – Edge, который с недавних пор работает на движке Chromium. Для этого перейдите на страницу браузера по ссылке: https://www.microsoft.com/en-us/edge?form=MA13DEhttps://dzen.ru/a/XlaiIiOvbniMIj2Z» target=»_blank»]dzen.ru[/mask_link]

C# Разработка

https://bitbucket.org/sergey_vaulin/wpf-application-host

Хочу поделиться с вами способом, как можно окно внешнего приложение «встроить» в свою программу. Ситуация из жизни: разрабатывая CRM систему для заказчика может появиться потребность, в одном из сценариев обслуживания, дать пользователю возможность произвести какие то манипуляции во внешней системе. Если эта система является Web сайтом, то задача решается добавлением WebBrowser на форму. Но представьте, что это какое то приложение, и что тогда делать?
Для этого можно провернуть трюк используя WinAPI, в результате которого окно внешнего приложения окажется «внутри» нашего (как будто экран виртуальной машиной), но у заказчика будет складываться иллюзия того, что мы его запустили внутри нашего приложения. И это похоже на магию.

  • Notepad — блокнот.
  • Write — простой редактор документов.
  • Regedit — редактор реестра.
Читайте также:
Стандартные программы Windows 7 список

Write редактор:

Редактор реестра:

Как это работает?

Нет, это не запуск приложения внутри нашего. Если отрыть Process Explorer, то можно увидеть, что мы запустили нужное приложение вне нашего процесса.

Трюк заключается в следующем:

  1. Запускаем нужное приложение (к примеру regedit.exe).
  2. Ожидаем, пока оно передёт в Idle состояние.
  3. Получаем у него Process.MainWindowHandle — это дескриптор главного окна внешнего приложения.
  4. На форме WPF (если используемся WinForm то можно без хоста) размещается WindowsFormsHost, дающий возможность использовать WinForm компоненты.
  5. В свойство Child у WindowsFormsHost размещается UserControlWinForms. Он будет выполнять функцию хоста окна внешнего приложения так как имеет Handle окна.
  6. Последняя итерация — это используя WinAPI функцию SetParent у внешнего окна выставить родителем UserControl от WinForms.
  7. Готово! Приложение магическим образом появилось внутри.

Внимание! Использованный TabControl ведёт себя так, что при переключении вкладок с Template происходит не создание нового UserControl, а использование одного для каждой вкладки. Поэтому и происходят постоянные запуски новых приложений при каждом переключение. Так же замечал глюк, что TabControl самопроизвольно переключал вкладки, поэтому будьте внимательны.

Можно ли не использовать WindowsFormsHost?

Казалось бы, почему бы не сделать все то же самое, но без WindowsFormsHost? Добавить обычный WPF UserControl и попытаться на нём разместить приложение, но тут нас ждёт разочарование. Все UI элементы в WPF наследуются от класса Visual и не имеют Win32 Handle окна, а значит редерингом окна занимается не Windows, а внутренние механизмы WPF. В этом можно убедиться, запустив Spy++ (Утилита идущая с Visual Studio и являющаяся аналогом Snoop, но для Win32 приложений), и нацелив на окна приложений написанных на WPF и Win32. Мы увидим следующее:

  • Анализируя стандартный Win32 калькулятор, мы видим, что все элементы управления окна появились в дереве, в иерархическом виде.
  • Для примера WPF приложения я выбрал главную форму окна существующего Enterprise решения. Как видно, в списке нет Children окон, как было сказано выше, рендеренгом занимается WPF Engine и для системы видно только главное окно.
Читайте также:
Как дать доступ программе в Виндовс 10


Ниже приведу изображение с хостинга приложения, на котором появилось Win32 окно, совместимое с окнами ОС Windows. Функцию хостинга осуществляет окно с именем класса WindowsForms.

Как использовать?

  • ApplicationPath — путь до исполняемого файла приложения.
  • ApplicationRunning — признак того, что приложение запущено.
  • ErrorText — содержит текст текущей ошибки.
  • MainWindowShowTimeoutSeconds — время, которое надо ждать дополнительно до момента создания главного окна приложения. Бывает ситуация, что приложение перешло в состояние Idle, но главное окно ещё не создалось. Поэтому Handle будет NULL. Выставив это значение, мы дадим приложению шанс полностью открыться за указанное время.

Заключение.

В заключении хотелось бы сказать, что помимо размещения окна я устанавливаю HOOK функцию на Win32 события внешнего приложения через SetWinEventHook. Её задумка в том, что если вам потребуется хостить внутри не только главное окно, но и ВСЕ создаваемые приложением окна, то достаточно в методе HOOK отлавливать событие создания новых окон и менять их Parent, как для главного окна. Возможно в будущем я добавлю эту возможность через флаг. Помимо этого вы можете контролировать всю активность внешнего приложения, устанавливать значения полей, нажимать на кнопки и вести себя как «БОТ» с целью автоматизировать какие то операции. Для этого пользуйтесь SendMessage и PostMessage функциями.

Рекомендуемые ссылки:

Источник: www.devowl.net

Как из сайта сделать программу для Windows?

Всем привет.
Есть небольшой сайт. Тест пдд. Сайт на пхп, инфа хранится в мускул базе.
Скажите, можно ли его обернуть в файл exe (приложение для виндовс)
Скачиваешь — запускаешь (без установки) — выглядит точно также как и на сайте, но уже в виде программы.
Грубо говоря — мини браузер для одного сайта.
Заранее спасибо!

  • Вопрос задан более трёх лет назад
  • 3683 просмотра
Читайте также:
Как отменить удаление программы в Windows 7

2 комментария

Оценить 2 комментария

facepook

Александр А: ну наверное незнание того, что такое ламп и тем более как что то на нем разворачивать. Собственно отсюда и вопрос возник как бы..

facepook

Владислав Турчинский: извини, но руки под другое заточены и к сожалению их всего 2.
поэтому проще узнать просто цену

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru