搞了很长时间了,一直没搞通,网上很多C++的资料,请高手看下C#的代码,给些指导,怎么能让IE的 Backspace 和回车按键被我的代码接收。using System;
using System.Collections.Generic;
using System.Text;namespace IEHttpPlugin
{
[System.Runtime.InteropServices.GuidAttribute("02361289-355D-3E8A-A181-28867B6D08EC")]
public class ExplorerBar : System.Windows.Forms.UserControl, IObjectWithSite, IDeskBand, IDockingWindow, IOleWindow, IInputObject
{
SHDocVw.WebBrowserClass sdvWebBrowser;
protected IInputObjectSite BandObjectSite; System.Windows.Forms.WebBrowser wbWebBrowser;
private System.Windows.Forms.ToolStrip tsToolBar;
private System.Windows.Forms.ToolStripButton tsbSeekerManage; public ExplorerBar()
{
} //客户浏览器开始请求页面
private string m_RequestUrl = "";
private string m_RequestPostData = "";
private void sdvWebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
{
m_RequestUrl = URL.ToString();
} //文档下载完毕
private void webBrowser_DocumentComplete(object pDisp, ref object URL)
{
try
{
string strLink = "";
SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)pDisp;
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)wb.Document; strLink = "请求URL :" + m_RequestUrl + "<br>";
}
catch (Exception ex)
{
Common.SaveTestInfo(ex.Message);
}
} [System.Runtime.InteropServices.ComRegisterFunctionAttribute]
public static void Register(Type t)
{
} [System.Runtime.InteropServices.ComUnregisterFunctionAttribute]
public static void Unregister(Type t)
{
} protected override void OnGotFocus(System.EventArgs e)
{
base.OnGotFocus(e);
NotifyExplorerGotFocus();
} protected override void OnLostFocus(System.EventArgs e)
{
base.OnLostFocus(e);
if (HasFocusIO() != 0)
NotifyExplorerLostFocus();
} public void NotifyExplorerLostFocus()
{
BandObjectSite.OnFocusChangeIS(this as IInputObject, 0);
} public void NotifyExplorerGotFocus()
{
BandObjectSite.OnFocusChangeIS(this as IInputObject, 1);
} #region IObjectWithSite 成员 public virtual void SetSite(Object site)
{
if (site != BandObjectSite)
{
if (BandObjectSite != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(BandObjectSite);
} if (sdvWebBrowser != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(sdvWebBrowser);
sdvWebBrowser = null;
}
} BandObjectSite = (IInputObjectSite)site;
if (BandObjectSite != null)
{
IServiceProviderCOM sp = (IServiceProviderCOM)BandObjectSite;
Guid guid = ExplorerGUIDs.IID_IWebBrowserApp;
Guid riid = ExplorerGUIDs.IID_IUnknown; try
{
object w;
sp.QueryService(ref guid, ref riid, out w); sdvWebBrowser = (SHDocVw.WebBrowserClass)System.Runtime.InteropServices.Marshal.CreateWrapperOfType(w as SHDocVw.IWebBrowser, typeof(SHDocVw.WebBrowserClass));
sdvWebBrowser.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(sdvWebBrowser_BeforeNavigate2);
sdvWebBrowser.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete);
}
catch (System.Runtime.InteropServices.COMException)
{
}
}
else
{
sdvWebBrowser.BeforeNavigate2 -= new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(sdvWebBrowser_BeforeNavigate2);
sdvWebBrowser.DocumentComplete -= new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete);
}
} public virtual void GetSite(ref Guid riid, out Object site)
{
site = BandObjectSite;
} #endregion #region IDeskBand 成员 public void GetWindow(out IntPtr hwnd)
{
hwnd = Handle;
} public void ContextSensitiveHelp(bool enterMode)
{
} public void ShowDW(bool show)
{
if (show)
{
this.Show();
}
else
{
this.Hide();
}
} public void CloseDW(int reserved)
{
this.Dispose(true);
} public void ResizeBorderDW(IntPtr borderRectangle, object toolbarSite, bool reserved)
{
} public void GetBandInfo(int bandID, int viewMode, ref DESKBANDINFO info)
{
info.wszTitle = "IE助手"; info.ptActual.X = this.Size.Width;
info.ptActual.Y = this.Size.Height; info.ptMaxSize.X = -1;
info.ptMaxSize.Y = -1; info.ptMinSize.X = -1;
info.ptMinSize.Y = -1; info.ptIntegral.X = 1;
info.ptIntegral.Y = 1; info.dwModeFlags = DBIMF.DBIMF_VARIABLEHEIGHT; info.dwMask &= ~DBIM.BKCOLOR;
} #endregion #region IInputObject 成员 public void UIActivateIO(int activate, ref MSG msg)
{
if (activate != 0)
{
System.Windows.Forms.Control ctrl = GetNextControl(this, System.Windows.Forms.Control.ModifierKeys != System.Windows.Forms.Keys.Shift);//first or last
this.Focus();
if (ctrl != null) ctrl.Select();
}
} public int HasFocusIO()
{
return this.ContainsFocus ? 0 : 1; //S_OK : S_FALSE;
} public virtual Int32 TranslateAcceleratorIO(ref MSG msg)
{
if (msg.message == 0x100) //WM_KEYDOWN
{
if (msg.wParam == (uint)System.Windows.Forms.Keys.Tab) //keys used by explorer to navigate from control to control
{
if (SelectNextControl(ActiveControl, true, true, true, false))
{
return 0; //S_OK
}
}
}
return 1; //S_FALSE
} #endregion
}
}
using System.Collections.Generic;
using System.Text;namespace IEHttpPlugin
{
[System.Runtime.InteropServices.GuidAttribute("02361289-355D-3E8A-A181-28867B6D08EC")]
public class ExplorerBar : System.Windows.Forms.UserControl, IObjectWithSite, IDeskBand, IDockingWindow, IOleWindow, IInputObject
{
SHDocVw.WebBrowserClass sdvWebBrowser;
protected IInputObjectSite BandObjectSite; System.Windows.Forms.WebBrowser wbWebBrowser;
private System.Windows.Forms.ToolStrip tsToolBar;
private System.Windows.Forms.ToolStripButton tsbSeekerManage; public ExplorerBar()
{
} //客户浏览器开始请求页面
private string m_RequestUrl = "";
private string m_RequestPostData = "";
private void sdvWebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
{
m_RequestUrl = URL.ToString();
} //文档下载完毕
private void webBrowser_DocumentComplete(object pDisp, ref object URL)
{
try
{
string strLink = "";
SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)pDisp;
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)wb.Document; strLink = "请求URL :" + m_RequestUrl + "<br>";
}
catch (Exception ex)
{
Common.SaveTestInfo(ex.Message);
}
} [System.Runtime.InteropServices.ComRegisterFunctionAttribute]
public static void Register(Type t)
{
} [System.Runtime.InteropServices.ComUnregisterFunctionAttribute]
public static void Unregister(Type t)
{
} protected override void OnGotFocus(System.EventArgs e)
{
base.OnGotFocus(e);
NotifyExplorerGotFocus();
} protected override void OnLostFocus(System.EventArgs e)
{
base.OnLostFocus(e);
if (HasFocusIO() != 0)
NotifyExplorerLostFocus();
} public void NotifyExplorerLostFocus()
{
BandObjectSite.OnFocusChangeIS(this as IInputObject, 0);
} public void NotifyExplorerGotFocus()
{
BandObjectSite.OnFocusChangeIS(this as IInputObject, 1);
} #region IObjectWithSite 成员 public virtual void SetSite(Object site)
{
if (site != BandObjectSite)
{
if (BandObjectSite != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(BandObjectSite);
} if (sdvWebBrowser != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(sdvWebBrowser);
sdvWebBrowser = null;
}
} BandObjectSite = (IInputObjectSite)site;
if (BandObjectSite != null)
{
IServiceProviderCOM sp = (IServiceProviderCOM)BandObjectSite;
Guid guid = ExplorerGUIDs.IID_IWebBrowserApp;
Guid riid = ExplorerGUIDs.IID_IUnknown; try
{
object w;
sp.QueryService(ref guid, ref riid, out w); sdvWebBrowser = (SHDocVw.WebBrowserClass)System.Runtime.InteropServices.Marshal.CreateWrapperOfType(w as SHDocVw.IWebBrowser, typeof(SHDocVw.WebBrowserClass));
sdvWebBrowser.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(sdvWebBrowser_BeforeNavigate2);
sdvWebBrowser.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete);
}
catch (System.Runtime.InteropServices.COMException)
{
}
}
else
{
sdvWebBrowser.BeforeNavigate2 -= new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(sdvWebBrowser_BeforeNavigate2);
sdvWebBrowser.DocumentComplete -= new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete);
}
} public virtual void GetSite(ref Guid riid, out Object site)
{
site = BandObjectSite;
} #endregion #region IDeskBand 成员 public void GetWindow(out IntPtr hwnd)
{
hwnd = Handle;
} public void ContextSensitiveHelp(bool enterMode)
{
} public void ShowDW(bool show)
{
if (show)
{
this.Show();
}
else
{
this.Hide();
}
} public void CloseDW(int reserved)
{
this.Dispose(true);
} public void ResizeBorderDW(IntPtr borderRectangle, object toolbarSite, bool reserved)
{
} public void GetBandInfo(int bandID, int viewMode, ref DESKBANDINFO info)
{
info.wszTitle = "IE助手"; info.ptActual.X = this.Size.Width;
info.ptActual.Y = this.Size.Height; info.ptMaxSize.X = -1;
info.ptMaxSize.Y = -1; info.ptMinSize.X = -1;
info.ptMinSize.Y = -1; info.ptIntegral.X = 1;
info.ptIntegral.Y = 1; info.dwModeFlags = DBIMF.DBIMF_VARIABLEHEIGHT; info.dwMask &= ~DBIM.BKCOLOR;
} #endregion #region IInputObject 成员 public void UIActivateIO(int activate, ref MSG msg)
{
if (activate != 0)
{
System.Windows.Forms.Control ctrl = GetNextControl(this, System.Windows.Forms.Control.ModifierKeys != System.Windows.Forms.Keys.Shift);//first or last
this.Focus();
if (ctrl != null) ctrl.Select();
}
} public int HasFocusIO()
{
return this.ContainsFocus ? 0 : 1; //S_OK : S_FALSE;
} public virtual Int32 TranslateAcceleratorIO(ref MSG msg)
{
if (msg.message == 0x100) //WM_KEYDOWN
{
if (msg.wParam == (uint)System.Windows.Forms.Keys.Tab) //keys used by explorer to navigate from control to control
{
if (SelectNextControl(ActiveControl, true, true, true, false))
{
return 0; //S_OK
}
}
}
return 1; //S_FALSE
} #endregion
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货