当前位置: 代码迷 >> C# >> 这样的代码居然也会出错?该如何解决
  详细解决方案

这样的代码居然也会出错?该如何解决

热度:75   发布时间:2016-05-05 04:23:08.0
这样的代码居然也会出错??
本帖最后由 onefox 于 2014-01-19 16:05:06 编辑
想做一个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例子改写您的项目。
  相关解决方案