.NET Framework보다 Win32에 익숙하고 .NET Framework에서 적절한 함수를 찾거나 P/Invoke를 사용하여 Win32 함수를 호출 할 수 있으므로 Win32의 관점에서 대답 할 것입니다.
난 당신이 다음 알고 있으리라 믿고있어 : 응용 프로그램 X의
- 프로세스 ID를
- 이름 (또는 텍스트) 또는 Windows 1, 2, 3,이 창을 고유하게 식별 할 텍스트를 가지고 .
프로세스 ID를 모르는 경우 프로세스를 열거하고 각 프로세스의 이름을 Application X와 비교해야합니다. 일치하는 항목이 있으면 프로세스 ID를 알고 있어야합니다.
먼저 세 개의 창을 찾으려면 프로세스 ID가있는 최상위 창을 찾으십시오. 이들 중 하나는 서브 윈도우의 조상이 될 것입니다.
EnumWindows()를 사용하여 모든 창을 열거하십시오. 열거하는 동안 당신이 찾고있는 프로세스 ID를 가진 모든 윈도우 (하나 이상있을 수 있음)를 적어 두십시오.
프로세스 ID와 일치하는 창의 목록을 사용하여 해당 목록의 각 창의 하위를 모두 확인해야합니다. EnumChildWindows()를 사용하여이 작업을 수행 할 수 있습니다. 더 이상 없을 때까지 자녀 창문의 모든 하위 창을 확인하십시오. 그렇게하면 프로세스의 모든 창을 커버 할 수 있습니다. 찾은 각 창에 대해 찾고있는 하위 창의 알려진 텍스트와 비교하십시오. 어딘가에 당신이 그것을 사용할 수있는 HWND 매치 스토어를 얻을 때.
이제 HWND가 있으므로 .Net 사용 가능한 Windows 컨트롤로 변환 할 수 있다고 가정합니다.
EnumWindows는 .Net Framework의 일부가 아니므로이 작업을 수행하려면 P/Invoke를 사용해야합니다. 모든 검색을 수행하고 배열의 HWND를 다시 전달하는 C/C++의 도우미 함수를 작성하는 것이 더 쉽습니다. 이렇게하면 P/Invoke를 통해 하나의 함수 만 호출하면됩니다. C/C++에서 Win32를 직접 호출하는 것이 더 직관적 일 수 있습니다.