Не могу нарисовать в Internet Explorer - PullRequest
2 голосов
/ 18 декабря 2009

У меня есть следующий код, который рисует квадрат в главном окне другого процесса:

private void DrawOnWindow(string processname)
{
    IntPtr winhandle = GetWindowHandle(processname);
    Graphics grph = Graphics.FromHwnd(winhandle);
    grph.DrawRectangle(Pens.Red, 10, 10, 100, 100);
}

private IntPtr GetWindowHandle(string windowName)
{
    IntPtr windowHandle = IntPtr.Zero;
    Process[] processes = Process.GetProcessesByName(windowName);
    if (processes.Length > 0)
    {
        for (int i = 0; i < processes.Length; i++)
        {
            if (processes[i].MainWindowHandle.ToInt32() > 0)
            {
                windowHandle = processes[i].MainWindowHandle;
                break;
            }
        }
    }
    return windowHandle;
}

Это работает, когда я передаю «firefox» методу DrawOnWindow, но не работает, когда я передаю"iexplore", и я не понимаю, почему.Что мне нужно сделать, чтобы заставить это работать в Internet Explorer?(IE8)

Ответы [ 2 ]

2 голосов
/ 18 декабря 2009

В IE вы рисуете родительское окно, а в IE8 установлен стиль окна WS_CLIPCHILDREN. Что вам нужно сделать, это спуститься по иерархии окон и выяснить, на каком именно дочернем объекте вы хотите рендерить, а затем перейти в город в этом окне.

1 голос
/ 18 декабря 2009

IE8 имеет один процесс верхнего уровня, который содержит главное окно и рисует в нем рамку, адресную строку и другие элементы управления. У t также есть несколько дочерних процессов, которым принадлежат одна или несколько вкладок и соответствующие им окна.

Ваш код вернет дескриптор окна для окна верхнего уровня последнего процесса Iexplore. Однако, если этот процесс является дочерним окном, возникают две проблемы:

  • не имеет окна верхнего уровня;
  • ничто не гарантирует, что текущая видимая вкладка принадлежит этому процессу. \

Вам необходимо изменить свой код и специальный случай для IE, чтобы он соответствовал специфике иерархии процесса / окна IE.

Кстати, если вы решите рисовать в Chrome, у вас возникнут аналогичные проблемы, поскольку они также выполняют похожие трюки с несколькими процессами и иерархией окон, которая охватывает эти процессы.

...