Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using mshtml doesn't work

Tags:

I have a c# app and i have tried using some mshtml elements. But i have a problem. The using mshtml; namespace gives me a error is Visual Studio 2012.

Here is my source code,

namespace Tagger
{

    using mshtml;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.CompilerServices;
    using System.Text;

    public class HTMLForm
    {
        private string _action = "";
        private string _method = "";
        public Hashtable Inputs = new Hashtable();

        public HTMLForm(IHTMLFormElement element)
        {
            this._method = element.method;
            this._action = element.action;
            foreach (IHTMLInputElement element2 in (IHTMLElementCollection) element.tags("input"))
            {
                try
                {
                    string name = element2.name;
                    string str2 = element2.value;
                    if (name == null)
                    {
                        name = element2.type;
                    }
                    this.Inputs.Add(name, str2);
                }
                catch
                {
                }
            }
        }

        public static HTMLForm[] GetAllForms(string html)
        {
            List<HTMLForm> list = new List<HTMLForm>();
            HTMLDocument document = (HTMLDocument) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("25336920-03F9-11CF-8FD0-00AA00686F13")));
            document.write(new object[] { html });
            document.close();
            foreach (IHTMLFormElement element in document.forms)
            {
                list.Add(new HTMLForm(element));
            }
            return list.ToArray();
        }

        public static HTMLForm GetFormByAction(string html, string action)
        {
            foreach (HTMLForm form in GetAllForms(html))
            {
                if (form.Action.ToLower() == action.ToLower())
                {
                    return form;
                }
            }
            return null;
        }

        public string ToPostData()
        {
            StringBuilder builder = new StringBuilder();
            foreach (string str in this.Inputs.Keys)
            {
                object obj2 = this.Inputs[str];
                string str2 = (obj2 == null) ? "" : obj2.ToString();
                builder.AppendFormat("{0}={1}&", HTTPBase.encode(str), HTTPBase.encode(str2));
            }
            if (builder.Length > 1)
            {
                return builder.ToString().Substring(0, builder.Length - 1);
            }
            return "";
        }

        public string Action
        {
            get
            {
                return this._action;
            }
            set
            {
                this._action = value;
            }
        }

        public string Method
        {
            get
            {
                return this._method;
            }
            set
            {
                this._method = value;
            }
        }        
    }
}

But i can't use the functions of htmlelement, IHTMLElementCollection . The compiler gives me a error.

Error 1 The type or namespace name 'mshtml' could not be found (are you missing a using directive or an assembly reference?)

Error 5   The type or namespace name 'HTMLDocument' could not be found (are 

you missing a using directive or an assembly reference?

Error 2 The type or namespace name 'IHTMLFormElement' could not be found (are you missing a using directive or an assembly reference?)

Error 3 The type or namespace name 'IHTMLElementCollection' could not be found (are you missing a using directive or an assembly reference?)

Error 4 The type or namespace name 'HTMLDocument' could not be found (are you missing a using directive or an assembly reference?)

like image 393
kks21199 Avatar asked Mar 28 '14 15:03

kks21199


People also ask

Why doesn't MSHTML support HTML5 standards?

MSHTML embedded in an application doesn't do this by default. The changes required to get MSHTML to support HTML5 standards are fairly large due to the original design many years ago, a design deeply embedded in the product. We are hoping that a move to EdgeHTML will make HTML5 standards available, but we need to test it first.

Is it possible to replace MSHTML with EdgeHTML in an application?

We need to replace MSHTML with EdgeHTML in the existing application. And yes, we are aware that EdgeHTML is only supported on Windows 10 and we will need to keep using MSHTML on previous version of Windows. +5. Good comment. Very clear. I'm not sure, but it seems to me that you have to use Windows 10 SDK to be able to use EdgeHTML.

Is there a reference for MSHTML in C++?

This section contains the reference for MSHTML. The documentation in this section is a partial listing of IWebBrowswer2 interface members. The complete IWebBrowser2 interface is documented in the MSHTML Reference content. This article describes how to connect to a running instance of Internet Explorer through C++ code.

Do I need Windows 10 SDK to use EdgeHTML?

I'm not sure, but it seems to me that you have to use Windows 10 SDK to be able to use EdgeHTML. Just try using the latest version Microsoft Visual Studio 2015 for Windows 10 and Microsoft Edge browser support. You can also download and try Embarcadero RAD Studio 10 Seattle, which fully supports Windows 10 development features.


2 Answers

Right click on References in your project in Solution Explorer. Then click Add Reference.... In Assemblies type in search 'HTML' and you'll see Microsoft.mshtml. Add this to your project and you could use HTMLDocument. Good luck

like image 152
Boris Parfenenkov Avatar answered Sep 18 '22 18:09

Boris Parfenenkov


Microsoft.mshtml is in COM tab in Reference Manager and it's named "Microsoft HTML Object Library".

like image 39
Niko Avatar answered Sep 17 '22 18:09

Niko