Member 13087594 Ответов: 3

Создать форму в качестве родительской для существующего приложения?


Можно ли создать новую форму c# в качестве родительской для существующего приложения(например, для MS excel)? Модельные формы или модальные

Что я уже пробовал:

Process[] processRunning = Process.GetProcesses();
foreach (Process pr in processRunning)
{
if (pr.ProcessName == "excel.exe")
{
hWnd = pr.MainWindowHandle.ToInt32();
ShowWindow(hWnd, SW_HIDE);

Maciej Los

Почему? А для чего?

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Имейте в виду, что функция SetParent будет "перерисовывать" целевое окно, чтобы оно появилось внутри вашего собственного элемента управления, например панели или формы,

..Но приложение будет вести себя точно так же, как и на рабочем столе. Пользователь по-прежнему может свободно перемещать окно приложения внутри формы, включая нажатие кнопок закрыть, свернуть и развернуть.

ВЫ НЕ ИМЕЕТЕ ПОЛНОГО КОНТРОЛЯ НАД ЭТИМ ПРИЛОЖЕНИЕМ И ЕГО ПОВЕДЕНИЕМ.


Рейтинг:
1

Kornfeld Eliyahu Peter

Функция SetParent (winuser.h) | Microsoft Docs[^]
Никогда не проверял его в Excel или других сложных приложениях, но он должен работать...

SetParent(pr.MainWindowHandle, [the handle of your window to put Excel into]);

Конечно, этот код (ваш) предполагает, что Excel работает, вы должны запустить его, если нет...


Рейтинг:
0

RickZeeland

В дополнение к превосходному ответу Корнфельда, вот пример C# : Разместите окно процесса внутри окна ваших приложений | Fluxbytes[^]