public static bool ElementVisibleOnScreen(IntPtr hWnd)
        {
            IntPtr hdc = PInvoke.GetDC(hWnd);

            PInvoke.RECT r;
            var          cb   = PInvoke.GetClipBox(hdc, out r);
            var          flag = false;

            switch ((PInvoke.ClipBoxComplexity)cb)
            {
            case PInvoke.ClipBoxComplexity.NullRegion:
                Console.WriteLine("window covered completely");
                flag = false;
                break;

            case PInvoke.ClipBoxComplexity.Error:
                Console.WriteLine("error: {0]", Marshal.GetLastWin32Error());
                flag = false;
                break;

            case PInvoke.ClipBoxComplexity.SimpleRegion:
                PInvoke.RECT rcClient;
                PInvoke.GetClientRect(hWnd, out rcClient);
                if (rcClient.Left == r.Left && rcClient.Top == r.Top && rcClient.Right == r.Right && rcClient.Bottom == r.Bottom)
                {
                    Console.WriteLine("completely uncovered");
                    flag = true;
                }
                else
                {
                    Console.WriteLine("partially covered");
                    flag = false;
                }
                break;

            case PInvoke.ClipBoxComplexity.ComplexRegion:
                Console.WriteLine("partially covered");
                flag = false;
                break;

            default:
                Console.WriteLine("unknown return code {0}", cb);
                flag = false;
                break;
            }
            PInvoke.ReleaseDC(hWnd, hdc);
            return(flag);
        }