2010-07-07 2 views
1

Мое приложение пыталось очистить IE8, здесь мы как-то получаем РУЧКУ в окно/обозреватель Internet Explorer. Теперь я хочу получить дескриптор задания для IE8. Одна идея - Определите сначала идентификатор процесса с помощью окна IE HANDLE с помощью GetWindowThreadProcessId(), но после этого я застрял.Как получить дескриптор задания, если у меня есть РУЧКА в одном из окон задания

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

+1

Нет ничего полезного в работе, связанной со скребками. –

ответ

1

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

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

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


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

+0

К сожалению, IE8 использует неаудированные объекты. Я получаю имя процесса от идентификатора процесса. - To Figure Out Это всегда будет iexplore.exe, а затем перечисляет все процессы с тем же именем, чтобы они имели один и тот же родительский элемент. Снова нужно получить новейший процесс во всех связанных процессах - нарисовать все еще Спасибо за ответ – dpb

+0

IE8 запустит каждую новую вкладку в качестве дочернего процесса в этом задании. Даже когда один запуск нового экземпляра (когда он уже открыт), будет выполняться как дочерний процесс в этом задании. Я хочу отменить один из этих дочерних процессов/вкладку ..., чтобы получить этот идентификатор процесса. Детали работы будут полезны. Я, хотя и ищу ... другой подход для решения этой проблемы – dpb

+0

Спасибо за входные данные :) – dpb

Смежные вопросы