문제

내가 하려고 했는데 이해 과정입니다.MainWindowHandle.

에 따라 MSDN;"주 창은 창 만들어지는 경우 프로세스가 시작됩니다.초기화 이후,다른 창을 열려 있는 것을 포함한 모달 및 TopLevel windows,지 첫 번째 창과 관련된 프로세스에 남아 있는 주요 창." (중점 추가)

하지만 디버깅하는 것으로 나타났 MainWindowHandle 듯 값을 변경하...내가 기대하지 않았고,특히 컨설팅 후 설명서를니다.

을 확인하는 행동을 만들었는 독립 WinForms 용 타이머를 확인하 MainWindowHandle 의"DEVENV"(Visual Studio)을 프로세스는 모든 100ms.

여기에 흥미로운 부분의 이 테스트는 응용 프로그램...

    IntPtr oldHWnd = IntPtr.Zero;

    void GetMainwindowHandle()
    {
        Process[] processes = Process.GetProcessesByName("DEVENV");

        if (processes.Length!=1)
            return;

        IntPtr newHWnd = processes[0].MainWindowHandle;

        if (newHWnd != oldHWnd)
        {
            oldHWnd = newHWnd;
            textBox1.AppendText(processes[0].MainWindowHandle.ToString("X")+"\r\n");
        }

    }

    private void timer1Tick(object sender, EventArgs e)
    {
        GetMainwindowHandle();
    }

당신이 볼 수있는 가치의 MainWindowHandle 변경하는 경우(예를 들어)를 클릭합에서 드롭다운 메뉴 내부 VS.

MainWindowHandleMystery

아마 제가 오해했다.

할 수 있는 사람이 빛?

도움이 되었습니까?

해결책

@일 연락,

나는 그것에 오류가 MSDN.당신은 분명히 볼 수 있습에서 Relfector,는"주요 창에서"확인합니다.NET 처럼 보인:

private bool IsMainWindow(IntPtr handle)
{
    return (!(NativeMethods.GetWindow(new HandleRef(this, handle), 4) != IntPtr.Zero)  
             && NativeMethods.IsWindowVisible(new HandleRef(this, handle)));
}

니다.순 코드를 열거 windows,그것은 분명 먼저 눈에 보이는 창(i.e최고 수준의 창의)이 기준입니다.

다른 팁

실제로 프로세스.MainWindowHandle 손잡이의 맨 위에 있는 창,아니지요"메인 창 처리"

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