WPF открывает exe-программу в окне WPF - PullRequest
6 голосов
/ 10 апреля 2010

Не уверен, возможно ли это, но есть ли способ открыть другую программу, например блокнот, в контейнере окна WPF? похож на возможность открывать веб-страницу с помощью элемента управления webbrowser?

По сути, я хотел бы открыть блокнот или другой исполняемый файл, но оставить его в контейнере окна WPF с помощью кода xaml / c #? не уверен, если это возможно?

Ответы [ 3 ]

6 голосов
/ 11 апреля 2010

Да, это возможно.

Все, что вам нужно сделать, это:

  1. Создайте WindowsFormsHost и добавьте его на панель в вашем пользовательском интерфейсе
  2. Запустите процесс (например, Блокнот), используя Process.Start
  3. Вызвать process.WaitForInputIdle
  4. Используйте process.MainWindowHandle, чтобы получить дескриптор окна
  5. Вызовите SetWindowPos, чтобы установить в окне процесса координаты и Z-порядок окна HwndHost
  6. Подключите HwndHost и process.MainWindowHandle для обнаружения изменений размера и повторите шаг 5.

Довольно просто сделать все это. В результате появляется все окно «Блокнот» (или любое приложение, которое вы запустили), и оно ведет себя точно так же, как если бы оно было частью вашего приложения WPF.

1 голос
/ 12 апреля 2010

удалось сделать это с помощью метода SetParent

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetParent(IntPtr hwc, IntPtr hwp);

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

получил помощь здесь: http://channel9.msdn.com/forums/TechOff/250417-Hide-window-caption-in-c/

0 голосов
/ 10 апреля 2010

Вы не можете этого сделать.

Причина, по которой вы можете просматривать веб-страницу, заключается в том, что IE был разработан с использованием архитектуры, которая позволяет это делать - механизм рендеринга фактически не является частью реального исполняемого файла IE, а представляет собой DLL, которая предоставляет компонент.

Общие EXE-файлы не работают таким образом, и вы не можете встроить их в свое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...