windows.forms 패널 내에서 타사 실행 응용 프로그램을 "도킹"하는 더 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1435358

  •  07-07-2019
  •  | 
  •  

문제

현재 다음과 같이 하고 있습니다.


// _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 메시지 루프가 해제될 때까지 기다리십시오. 당신은 이미 그렇습니다.

일반적으로 호스팅하는 프로그램을 수정하지 않고는 이 작업을 수행하는 것이 불가능하다고 생각합니다.

편집하다:작업 표시줄에 숨기고, 제목 표시줄을 제거하고, 프로그램이 이동할 때 이동하는 등의 방법으로 다른 프로그램을 호스팅 영역 위에 유지하려고 할 수 있습니다.그러나 여전히 완벽하게 작동하지는 않습니다.다른 대안을 찾아보시길 권합니다.

타사 응용 프로그램의 원래 개발자에게 연락하여 조언을 구해 보세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top