Pergunta

Estou tendo um problema com o InternetExplorer em SHDocVw.dll.Também tenho mshtml.tlb referenciado (enquanto pesquisava no Google, li 1 comentário que dizia que deveria ter mshtml.dll referenciado, mas que isso não poderia ser feito em Microsoft Visual Studio Expresso, não sei até que ponto isso é verdade).Aqui está uma pequena função em sua forma mais básica que não funciona para mim:

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

O problema é que quando eu crio a instância do IEObj, ela é considerada do tipo System.__ComObject em vez de SHDocVw.InternetExplorer, e todas as subpartes também são do tipo System.__ComObject.Quando tento qualquer uma das seguintes afirmações ...

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

... continuo recebendo a mesma mensagem de erro:

Não é possível converter implicitamente o tipo 'sistema .__ comObject' em 'system.windows.forms.htmlelement' (obviamente o tipo convert-to é diferente para o IEObj.Document).

Sou novo em c# (vindo do VBA, então estou familiarizado com programação), mas no VBA o equivalente funciona perfeitamente sem precisar convertê-lo de forma alguma.

É algo que estou fazendo errado?Caso seja minha criação do objeto, o seguinte é (aproximadamente) o código que usei para testar a função:

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.

}

Tudo o que eu realmente quero fazer é travar vários elementos para poder inserir texto em caixas de texto, clicar em botões, etc.Eu também precisaria ser capaz de usar as variáveis ​​do documento (como Documento.Body.InnerHtml, etc).Todo o projeto deve ser um monte de funções contidas em uma DLL para serem referenciadas por outros projetos.

Foi útil?

Solução

Você está tentando usar o WinForms HtmlElement aula, que não é um objeto COM.
Você não pode misturar o nativo InternetExplorer Objeto COM com as classes gerenciadas no WinForms.

Você deve usar as classes WinForms (o WebBrowser controle) em vez disso.
Na maioria dos casos, você não precisa do COM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top