windows.forms 패널 내에서 타사 실행 응용 프로그램을 "도킹"하는 더 좋은 방법은 무엇입니까?
문제
현재 다음과 같이 하고 있습니다.
// _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을 변경하면 애플리케이션 UI의 일부 부분이 더 이상 제대로 작동하지 않는다는 것입니다(예:버튼에 텍스트가 없음).
도킹된 애플리케이션에 문제를 일으키지 않고 이 작업을 수행할 수 있는 방법이 있습니까?(.net 또는 user32를 통해)?
해결책
우선 단순히 1.5초만 기다리지 말고 전화를 걸어보세요. 당신은 이미 그렇습니다.procTest.
WaitForInputIdle
메시지 루프가 해제될 때까지 기다리십시오.
일반적으로 호스팅하는 프로그램을 수정하지 않고는 이 작업을 수행하는 것이 불가능하다고 생각합니다.
편집하다:작업 표시줄에 숨기고, 제목 표시줄을 제거하고, 프로그램이 이동할 때 이동하는 등의 방법으로 다른 프로그램을 호스팅 영역 위에 유지하려고 할 수 있습니다.그러나 여전히 완벽하게 작동하지는 않습니다.다른 대안을 찾아보시길 권합니다.
타사 응용 프로그램의 원래 개발자에게 연락하여 조언을 구해 보세요.
제휴하지 않습니다 StackOverflow