저는 C# Windows 응용 프로그램을 가지고 있으며 궁극적으로 interop 구성 요소의 대화 상자를 시작합니다. 문제는이 대화 상자 창이 C# 응용 프로그램의 기본 창 뒤에 표시되어 사용자가 alt-tab을 눌러야 찾을 수 있다는 것입니다.C# 창 핸들에서 부모 프로세스 가져 오기
나는이 대화 상자 창을 찾아 오도록 위치에 조치를 넣었습니다...
private static extern bool SetForegroundWindow(IntPtr hWnd);
public class SearchData
{
public string Wndclass;
public string Title;
public IntPtr hWnd;
}
private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, ref SearchData data);
private delegate bool EnumWindowsProc(IntPtr hWnd, ref SearchData data);
public static bool EnumProc(IntPtr hWnd, ref SearchData data)
{
//Code to determine whether the window from handle hWnd is our target window.
//apply handle, title, class to data and halt the enumeration
}
...하지만 '발견'대화는 대화 상자의 클래스 이름과 형태로 제목 변경과 같은 문제가있다.
그러나 대화 상자 창의 상위 프로세스 (작업 관리자> 프로세스로 이동)는 현재 프로세스와 동일합니다. 그래서이 대화 상자 창을 정확하게 '찾기'위해서 모든 창을 열거하고 부모 processID를 찾고 CurrentProcess와 비교하는 것이 목표입니다.
창 핸들에서 전체 상위 프로세스를 가져 오는 방법이 있습니까?
훌륭합니다, 감사합니다. 이 답변과이 게시물 (http://stackoverflow.com/questions/2281429/how-to-enumerate-all-windows-within-a-process)을 통해 해결책을 얻었습니다. – MoSlo