Всем доброго времени суток.
Помогите пожалуйста разобраться с проблемой:
я пишу плагин к IE,
и когда я регистрирую обработчик на событие onclick, то со страницей(например
www.google.com) творится что-то станное,
я не могу вводит символы в поисковую сторку, вообще курсор туда попадет только по правому нажатию мыши.
Такая же проблема и с другими событиями onkeypress, onmousedown и т.д., но не совсеми(onfocusin, onfocusout).
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace PluginIE
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")]
public interface IObjectWithSite
{
[PreserveSig]
int SetSite([MarshalAs(UnmanagedType.IUnknown)]object site);
[PreserveSig]
int GetSite(ref Guid guid, out IntPtr ppvSite);
}
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("C59EB780-B556-4b38-A20D-D666E4B081E2")]
[ProgIdAttribute("PluginIE.SampleBHO")]
public class SampleBHO : IObjectWithSite
{
public const string GUID = "C59EB780-B556-4b38-A20D-D666E4B081E2";
private SHDocVw.WebBrowser webBrowser = null;
private mshtml.HTMLDocument doc = null;
private mshtml.HTMLDocumentEvents2_Event iEvent = null;
public int SetSite(object pUnkSite)
{
if (pUnkSite != null)
{
webBrowser = (SHDocVw.WebBrowser)pUnkSite; // set the reference
if (webBrowser != null && webBrowser.FullName.Contains("Internet Explorer"))
{
webBrowser.PutProperty("BHO", this);
webBrowser.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete);
}
}
else
{
if (webBrowser != null)
{
webBrowser = null;
}
}
return 0;
}
public int GetSite(ref Guid riid, out IntPtr ppvSite)
{
ppvSite = System.IntPtr.Zero;
if (webBrowser != null)
{
IntPtr pSite = IntPtr.Zero;
IntPtr pUnk = Marshal.GetIUnknownForObject(webBrowser);
Marshal.QueryInterface(pUnk, ref riid, out pSite);
Marshal.Release(pUnk);
if (!pSite.Equals(IntPtr.Zero))
{
ppvSite = pSite;
}
else
{
webBrowser = null;
//Marshal.ThrowExceptionForHR(E_NOINTERFACE);
}
}
else
{
webBrowser = null;
//Marshal.ThrowExceptionForHR(E_FAIL);
}
return 1;
}
void webBrowser_DocumentComplete(object pDisp, ref object URL)
{
doc = (mshtml.HTMLDocument)webBrowser.Document;
iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
//register event handler for onclick
iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(iEvent_onclick);
}
bool iEvent_onclick(mshtml.IHTMLEventObj pEvtObj)
{
MessageBox.Show(pEvtObj.srcElement.tagName);
return true;
}
/***********************************************************************
* We need these functions for the registry entries. Else the browser wouldn't
* know that we exist.
*
***********************************************************************/
[ComRegisterFunction]
internal static void RegisterFunction(Type typeToRegister)
{
try
{
Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{" + GUID + "}");
}
catch (Exception e)
{
System.Console.WriteLine(e.StackTrace);
}
}
[ComUnregisterFunction]
internal static void UnregisterFunction(Type typeToRegister)
{
try
{
Microsoft.Win32.Registry.LocalMachine.DeleteSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{" + GUID + "}");
}
catch (ArgumentException e)
{
System.Console.WriteLine(e.StackTrace);
}
}
}
}