BHO для захвата пользовательских кликов отлично работает в Windows, кроме Windows 7 Home Premium с IE9 - PullRequest
1 голос
/ 26 марта 2012

Я написал BHO для IE 8 и IE9, который связывает и захватывает определенные элементы (например, элемент INPUT) со страницы пользователя на моем веб-сайте и вместо выполнения события click выполняет пользовательскую пост-обработку и предоставляет пользователю различные варианты на основе данные, прикрепленные к каждому элементу div / input, на который нажал пользователь.

Теперь проблема в том, что он прекрасно работает в следующих конфигурациях:

  • Windows XP, IE 8 работает
  • Windows 7 Ultimate x86, IE 8 - работает
  • Windows 7 Ultimate x64, IE 8 - работает
  • Windows 7 Ultimate x86, IE 9 работает
  • Windows 7 Ultimate x64, IE 9 - работает

не работает для следующих конфигураций

  • Windows 7 Home Premium x64, IE 9

Я все перепробовал, но, похоже, ничего не делает, BHO, похоже, загружен в Управляемые аддоны , но ничего не делает,

Я пытался отключить

  • антивирус,
  • smartscreenfilter,
  • защищенный режим,
  • сброс дополнительных настроек и т.д.

но, похоже, не работает на Windows 7 Home Premium x64 .

Я не пробовал это в x86 версии Windows 7 Home Premium.

Пожалуйста, помогите. Если кто-то из вас испытал то же самое и нашел решение, пожалуйста, поделитесь.

1 Ответ

1 голос
/ 28 марта 2012

На первый взгляд, я не знаю ничего особенного в Home Premium x64, которое могло бы помешать его работе.Несколько советов, чтобы начать расследование:

  1. Загружена ли ваша DLL.Использовал проводник процессов Sysinternal.
  2. Вызывается ли DllMain.используйте отладчик WinDBG для отладки iexplore.exe и установите для отладчика прерывание при загрузке модуля: sxe ld YourDll.dll .
  3. Пробуете ли вы обе версии IE?IE есть и в "c: \ program files", и в c: \ program files (x86) ". Ваш BHO 32 или 64 бита?
  4. Это то, что делает ваш код или перед вашим кодом. Другоечем DllMain, следующая точка входа в ваш код - SetSite. Если ваш код загружается, вы получаете IE для вызова этого метода?

РЕДАКТИРОВАТЬ: больше вещей, которые вы можете попробовать (после прочтения ваших комментариев):

Я предполагаю, что в вашей DLL отсутствует что-то, что мешает ее загрузке. Проверьте, загружается ли ваша DLL и работает ли рукопожатие между IE и вашим объектом.

  1. Попробуйте поставитьточка останова на методе SetSite (или попытка записать строку в отладчик)
  2. Эмулировать IE! Реализовать короткую встроенную консольную программу на C ++. В основном вызове CoInitialize (однопотоковая квартира - это по умолчанию), а затемCoCreateInstance ваш объект класса (это CLSID). Посмотрите, создан ли ваш объект.
...