Как получить ручную работу, если у меня есть РУЧКА к одному из окон работы - PullRequest
1 голос
/ 07 июля 2010

Мое приложение пыталось очистить IE8, здесь мы как-то получаем HANDLE для Internet Explorer Window / UI. Теперь я хочу получить ручную работу для IE8. Одна из идей - Сначала определите идентификатор процесса, используя IE Window HANDLE, используя GetWindowThreadProcessId (), но после этого я застрял.

В IE8 появилась новая реализация, здесь каждая открытая вкладка является процессом в задании. Таким образом, IE8, который мы видим, управляется как работа.

1 Ответ

1 голос
/ 07 июля 2010

Я не смог найти никакого документированного способа получить работу, к которой привязан процесс;Кроме того, я не смог найти никакого документированного способа перечисления всех заданий в системе, кроме WMI-способа , который, однако, работает только с XP и далее (что я не думаю, что это проблема, так как вынацеленный на IE8) и только с именованными заданиями (что на самом деле может быть проблемой, если IE8 использует анонимные объекты заданий).

Если задания IE находятся в этом списке, то дорога идет вниз: просто используйте OpenJobObject на каждое имя задания, которое вы можете получить (или, если вам удастся, сузить свою работу с помощью некоторой эвристики в именах заданий, даже лучше) и использовать IsProcessInJob , чтобы проверить, что ваш дескриптор процесса (который выget с OpenProcess + GetWindowThreadProcessId ) принадлежит заданию;как только вы получите матч, все готово.Не забудьте закрыть все эти ручки!:)

В неудачном случае, когда объекты заданий, используемые IE8, не называются, тогда все становится более сложным.Возможно, вам придется прибегнуть к почти недокументированным (от Microsoft, но широко документированным в сети) методам перечисления дескрипторов, чтобы перечислить все дескрипторы, относящиеся к вашему целевому процессу.Затем вы можете отфильтровать только маркеры объектов задания и использовать метод, описанный выше, чтобы получить правильный.

Кстати, зачем вам нужен доступ к объектам заданий, которые используются в IE8?

...