Лучший способ "закрепить" стороннее запущенное приложение на панели windows.forms? - PullRequest
2 голосов
/ 17 сентября 2009

В настоящее время я делаю это следующим образом:


// _Container is the panel that the program is to be displayed in.

System.Diagnostics.Process procTest = new System.Diagnostics.Process();
procTest.StartInfo.FileName = "TEST.EXE";
procTest.StartInfo.CreateNoWindow = false;
procTest.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
procTest.Start();

procTest.WaitForInputIdle();
SetParent(procTest.MainWindowHandle, _Container.Handle);
MoveWindow(procTest.MainWindowHandle, 
           0, 0, _Container.Width, _Container.Height, true);

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

Есть ли способ сделать это, не вызывая проблем с закрепленным приложением? (Либо через .net или user32)?

1 Ответ

1 голос
/ 17 сентября 2009

Прежде всего, вместо того, чтобы просто ждать 1,5 секунды, попробуйте позвонить procTest.WaitForInputIdle, чтобы дождаться освобождения его цикла сообщений. Вы уже находитесь.

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

РЕДАКТИРОВАТЬ : Вы можете попытаться удержать другую программу над областью хостинга, скрывшись от панели задач, удалив строку заголовка, переместив ее по мере перемещения вашей программы и т. Д. Однако это все равно не будет отлично работает; Я рекомендую вам попробовать найти альтернативу.

Попробуйте связаться с оригинальными разработчиками стороннего приложения и попросить их совета.

...