想做一个C#操控IE的东西,系统时Windows7,浏览器是IE7,VS是2008
网上Copy了一点代码,但慕名奇妙得出差了。
InternetExplorer ie = null;
if (p != null)
{
SHDocVw.ShellWindows allBrowser = new ShellWindows();
if (allBrowser.Count != 0)
{
for (int i = 0; i < allBrowser.Count; i++)
{
InternetExplorer x = (InternetExplorer)allBrowser.Item(i);
int m = 0 + x.HWND; //这里VS报错
MessageBox.Show("x.HWND = " + m); //但这个消息框会正常显示,里面还有6位数的m值
}
}
}
错误信息:
未处理 System.InvalidCastException
Message="指定的转换无效。"
Source="Interop.SHDocVw"
StackTrace:
在 SHDocVw.IWebBrowser2.get_HWND()
在 testWindows1.Form1.button1_Click(Object sender, EventArgs e) 位置 D:\Visual Studio Projects\Projects\testWindows1\testWindows1\Form1.cs:行号 42
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 testWindows1.Program.Main() 位置 D:\Visual Studio Projects\Projects\testWindows1\testWindows1\Program.cs:行号 18
在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
------解决思路----------------------
看类是类型不对啊,看看HWND是int类型还是IntPtr类型
------解决思路----------------------
问题肯定出在这行代码
InternetExplorer x = (InternetExplorer)allBrowser.Item(i);
先判断 x 是不是 null 试试?
------解决思路----------------------
HWND 属性不是有效的 web 浏览器控件的属性。
返回的6位数指的是“承载 web 浏览器控件中的 Visual Basic 或 Visual C++ 的应用程序,并调用其 HWND 属性通常返回 E_FAIL HRESULT”。
附上微软官网上面的解释http://support.microsoft.com/kb/244310/zh-cn#survey
请参考VB例子改写您的项目。