-->

BHO for capturing user clicks works fine in Window

2020-07-30 01:36发布

问题:

I have written a BHO for IE 8 and IE9 that binds and capture certain elements(e.g INPUT element) from a user's page on my website and instead of performing the click event, performs custom post processing and presents user with different options based the data attached to each div/input element on which user has clicked.

Now the problem is: it works fine in the following configurations:

  • Windows XP , IE 8 working
  • Windows 7 Ultimate x86 , IE 8 - working
  • Windows 7 Ultimate x64 , IE 8 - working
  • Windows 7 Ultimate x86 , IE 9 working
  • Windows 7 Ultimate x64 , IE 9 - working

It is not working for the following configurations

  • Windows 7 Home Premium x64 , IE 9

II have tried everything but it doesn't seem to do anything, the BHO appears to be loaded in Managed Addons but it does nothing,

I tried disabling

  • antivirus,
  • smartscreenfilter,
  • protected mode,
  • advanced settings reset etc

but it doesn't seem to work on Windows 7 Home Premium x64.

I didn't try it in x86 version of Windows 7 Home Premium though.

Kindly help. If any of you have experienced the same and found a solution then please do share.

回答1:

On its surface, I'm not aware of anything special about Home Premium x64 that would prevent it from running. Few hints to start your investigation:

  1. Is your DLL loaded. Used Sysinternal's process explorer.
  2. Is DllMain being called. use WinDBG debugger to debug iexplore.exe, and set debugger to break on module load: sxe ld YourDll.dll.
  3. Do you try both version of IE? There are IE in both "c:\program files" and c:\program files(x86)". Is your BHO 32 or 64 bits?
  4. Is it something your code is doing or before your code. Other than DllMain, the next entry point to your code is SetSite. If your code load, do you get IE to call this method?

EDIT: more stuff you can try (after reading your commends):

My guess is that your DLL is missing something that prevents it to load. Verify whether your DLL loads and the handshake between IE and your object is working.

  1. Try to put a breakpoint on the SetSite method (or try to write a string to the debugger)
  2. Emulate IE! Implement a short native console program in C++. In main call CoInitialize (single threaded apartment - that's the default), and then CoCreateInstance your class object (that's the CLSID). See if your object instantiated.