2012-03-09 5 views
2

다른 창 내부에서 최상위 창을 열 수있는 Windows 응용 프로그램을 실행할 수 있습니까? 또는 창을 소유 한 '데스크톱'/ 가짜 데스크톱을 새로 설정 하시겠습니까?다른 창 내부에서 Windows 응용 프로그램 실행

테스트 용 응용 프로그램을 자동화하기 위해 UI 자동화를 사용하고 있습니다. 테스트중인 애플리케이션을 일종의 샌드 박스에두기를 원합니다. 데스크탑과 앱 사이의 인공 부모 창 또는 가상 데스크톱, 두 번째 무효 등입니다.이 데스크톱 (및 테스트중인 앱)은 표시 할 필요가 없습니다.

테스트중인 응용 프로그램의 다른 인스턴스 (일반 데스크톱 또는 샌드 박스에서)가 서로 충돌하지 않아야합니다 (창 이름/클래스 와이즈) - 테스트중인 응용 프로그램이 여러 인스턴스를 갖는 것이 안전합니다 ...

나는 이것이 hackish 인 것처럼 보입니다. 그래서 win32 hacks가 환영받을 것입니다. :)

+0

그것은 지원됩니다, 당신은 하나의 당신의 내부에 창문을 붙이기 위해 SetParent()를 호출 할 수 있습니다. 실제로 전혀 도움이되지는 않지만 의미있는 작업을 수행하려면 창 핸들이 필요합니다. GetWindowRect()를 호출하면 똑같은 작업이 수행됩니다. –

답변

4

CreateDesktop을 사용하여 데스크톱을 만들고 대상 응용 프로그램을 시작할 때 STARTUPINFO에 이름을 전달할 수 있습니다.

+0

굉장합니다, 고마워요. 오늘 밤에 내가 이걸 가지고 놀거야. –

+2

몇 가지 제한 사항이 있음을 유의하십시오. 앱을 조작하는 UIAutomation 기능 (정보를 반환하는 것과 반대되는)의 상당 부분은 대상 UI에 입력 포커스가 있어야하지만 현재 활성 데스크톱에있는 경우 입력 포커스 만받을 수 있어야합니다 . 따라서 바탕 화면을 만들고 그 바탕 위에 응용 프로그램을 넣을 수는 있지만 현재의 (눈에 보이는) 바탕 화면이 아닌 경우 일부 자동화가 예기치 않은 방식으로 실패 할 수 있습니다. – BrendanMcK

+0

비활성 데스크탑에서 자동화 관련 문제에 대한 자세한 내용은 관련 질문 [여기] (http://stackoverflow.com/questions/9563549/what-happens-behind-the-windows-lock)에 대한 대답을 참조하십시오. -screen/9565714 # 9565714). – BrendanMcK

관련 문제