Pregunta

Tengo un problema con Internet Explorer en SHDocVw.dll.También tengo referencia a mshtml.tlb (mientras buscaba en Google, leí 1 comentario que decía que debería hacer referencia a mshtml.dll, pero que esto no se podía hacer en Microsoft Visual Studio Express, aunque no sé qué tan cierto es esto).Aquí hay una pequeña función en su forma más básica que no me funcionará:

public static HtmlElement GetDocumentControlByID(
    ref SHDocVw.InternetExplorer IEObj, 
    string ControlID)
{
    HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);
    return ReturnElement;
}

El problema es que cuando creo la instancia de IEObj, se considera tipo System.__ComObject en lugar de SHDocVw.InternetExplorer, y todas las subpartes también son de tipo System.__ComObject.Cuando intento cualquiera de las siguientes afirmaciones...

Document WebDoc = IEObj.Document;
HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);

...Sigo recibiendo el mismo mensaje de error:

No se puede convertir implícitamente el tipo 'Sistema .__ Comobject' a 'System.Windows.Forms.htmLelement' (obviamente el tipo convertido es diferente para el IEObj.Document).

Soy nuevo en C# (vengo de VBA, por lo que estoy familiarizado con la programación), pero en VBA, el equivalente funciona perfectamente sin necesidad de convertirlo de ninguna manera.

¿Es algo que estoy haciendo mal?En caso de que sea mi creación del objeto, el siguiente es (aproximadamente) el código que utilicé para probar la función:

public static void Main(String [] args)
{
    SHDocVw.InternetExplorer IEObj = new SHDocVw.InternetExplorer();
    IEObj.Navigate("http://sports.ladbrokes.com/");
    while (IEObj.ReadyState != 4)
    {

    }

    // There is a textbox that definitely exists

    HtmlElement NetControl = GetDocumentControlByID(ref IEObj, "username");

    // I was goint to manipulate it after this, but it crashes in the above function.

}

Todo lo que realmente quiero hacer es aferrarme a varios elementos para poder ingresar texto en cuadros de texto, hacer clic en botones, etc.También necesitaría poder usar las variables del documento (como Documento.Cuerpo.InnerHtml, etc).Todo el proyecto será un conjunto de funciones que estarán contenidas en una DLL a la que otros proyectos harán referencia.

¿Fue útil?

Solución

Estás intentando utilizar WinForms. HtmlElement clase, que no es un objeto COM.
No puedes mezclar lo nativo InternetExplorer Objeto COM con las clases administradas en WinForms.

Deberías usar las clases de WinForms (las WebBrowser control) en su lugar.
En la mayoría de los casos, no necesita COM en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top