解决方案 »

  1.   

    mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc2.parentWindow;//拿到html对象
    win.execScript("changeRegImg()", "javascript");//调用JS用Microsoft.mshtml.dll可以再c#程序里操作IE。
      

  2.   

    感谢楼上的.再补充一下.实际操作的时候.
    doc2.parentWindow
    这句会报异常InvalidCastException
    Specified cast is not valid.
      

  3.   

    你要确定你的doc2是什么对象,是不是IHTMLDocument2
    还有就是看看你取得的doc2是不是ie的,其他浏览器的文档对象会报错,文档对象
      

  4.   

    doc对象是{mshtml.HTMLDocumentClass}
      

  5.   


    应该是:mshtml.IHTMLDocument2 iHTMLDocument2 = GetIHTMLDocument2ByUrl(payUrl);不是HTMLDocumentClass
      

  6.   


    可是你跟我说你要alert()
      

  7.   

    alert();只是一段javascript脚本的示例而已.
    实际运行的可能是document.getelementbyid('XXXX').value="XXXXXXXX";
      

  8.   

      你自己不是用的WebBrowser组件? 还不用webbrowser
      

  9.   

    回12楼
    我没有用WebBrowser啊.
      

  10.   

    哥们,你还是不了解mshtml这个dll~~~这个完全可以直接操控整个页面,包括任何标签,你为毛还要通过调用js的形式来改value啊
      

  11.   

    哈哈,15楼兄弟比较有想象力!我只是想写个帐户自动登录的软件.如果用mshtml这个dll自带的功能确实可以实现我需要的功能,可是自由度不高.
    每个网站登录方式都是不同的.
    有些是用户名+密码
    有些还有其他内容.
    所以我打算只让软件起到保存信息,输出信息的功能,具体的登录功能放到配置中去,由js完成.
    这样可定制性不是很高吗?
      

  12.   

    既然是账户自动登录 那你为何要用这么复杂的用mshtml或webbrowser这些去实现呢?
    你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧 
      

  13.   

    你还是描述的不是那么清楚 如果是你自己软件里要帮用户自动登录账户 然后获取信息显示在软件里可以用我上面的方案
    如果你只是想帮用户打开浏览器,然后帮用户自动登录可以参考下下面这片文章
    http://blog.csdn.net/zhangaijiang/article/details/6039719
      

  14.   

    我的目标很简单,
    1,让浏览器打开网址
    2,让浏览器运行指定的javascript脚本现在的问题是卡在2上面了.
      

  15.   


    哥们,那也得看看我的需求是什么吧?
    我登录了网页后呢?总要让人来操作网页吧?
    你通过httprequest登录了,我怎么把登录结果转移到IE上面去呀?
      

  16.   

    那你用sesion做判断,在数据库中做限制,登陆之后在用户的state中设置一个值,这里需要注意,你要定时去把登陆状态更新下,,,,
      

  17.   

    嘿嘿,我自己搞定了,不过COM这东西真烦人,接口之间没有继承关系,无法匿名转换,但是强转却也能转换,
    谁能给我一下解释吗?下面这段代码是可以成功运行的,也是完全满足要求的.
    ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
    foreach (InternetExplorer Browser in m_IEFoundBrowsers)
    {
    if (Browser.Document is HTMLDocumentClass)
    {
    HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass;
    HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script");
    script.text = "alert('a');";
    HTMLBodyClass body = doc2.body as HTMLBodyClass;
    body.appendChild((IHTMLDOMNode)script);
    }
    }
      

  18.   

    -------------
    COM是有继承的,至于匿名么貌似没有ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
    ----------------
    ShellWindows 继承了IShellWindows, DShellWindowsEvents_Event这两个接口.包含了公共枚举IEnumerable,和两个事件方法。主要返回回windows窗口数目
    foreach (InternetExplorer Browser in m_IEFoundBrowsers)
    //遍历当前IE实例
    {
    if (Browser.Document is HTMLDocumentClass)
    {
    HTMLDocumentClass这个继承了大约十二到十一个接口和一堆的方法。主要是用来增强HTMLDocument这个mS 接口。
    HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass;
    HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script");
    //HTMLScriptElement ,ms接口 。下面三句是添加一个Element元素到BODY里面(DOM树)
    script.text = "alert('a');";
    HTMLBodyClass body = doc2.body as HTMLBodyClass;
    body.appendChild((IHTMLDOMNode)script);
    }
    }
      

  19.   

    HTMLBodyClass body = doc2.body as HTMLBodyClass; 我运行 得到的是 null 啊