문제

다른 앱 MainWindowHandle에 대한 앱을 구축하고 있습니다. Window State에 대한 정보를 수집합니다. 어린이 창에 대한 정보를 수집하는 데 아무런 문제가 없지만 응용 프로그램의 다른 열린 창이나 메뉴에도 액세스 할 수 없습니다. 응용 프로그램의 모든 창 핸들을 얻는 방법이 있습니까?

도움이 되었습니까?

해결책

당신은 무엇을 할 수 있습니다 Process.MainWindowHandle 다음과 같이 나타납니다 : p/호출을 사용하여 호출 EnumWindows 시스템의 모든 최상위 창에 대한 콜백 메소드를 호출하는 함수.

콜백에서 전화하십시오 GetWindowThreadProcessId, 창의 프로세스 ID를 비교하십시오 Process.Id; 프로세스 ID가 일치하면 창 핸들을 목록에 추가하십시오.

다른 팁

먼저, 응용 프로그램의 메인 위도우의 창 처리를 받아야합니다.

 [DllImport("user32.dll", SetLastError = true)]
 static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

 IntPtr hWnd = (IntPtr)FindWindow(windowName, null);

그런 다음이 핸들을 사용하여 모든 자식을 얻을 수 있습니다.

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);

private List<IntPtr> GetChildWindows(IntPtr parent)  
{  
    List<IntPtr> result = new List<IntPtr>();  
    GCHandle listHandle = GCHandle.Alloc(result);  
    try  
    {  
         EnumWindowProc childProc = new EnumWindowProc(EnumWindow);  
         EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));  
    }  
    finally  
    {  
         if (listHandle.IsAllocated)  
               listHandle.Free();  
    }  
    return result;  
}   
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top