SHDocVw.dll の InternetExplorer に問題があります。私も mshtml.tlb を参照しています(グーグル中に、 mshtml.dll を参照する必要があるというコメントを1つ読みましたが、これはMicrosoft Visual Studio Expressでは実行できませんでしたが、これがどれほど真実かはわかりません)。これは、私にとっては機能しない最も基本的な形式の小さな関数です。
public static HtmlElement GetDocumentControlByID(
ref SHDocVw.InternetExplorer IEObj,
string ControlID)
{
HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);
return ReturnElement;
}
問題は、IEObj インスタンスを作成すると、System.__ComObject
ではなくtype と見なされSHDocVw.InternetExplorer
、すべてのサブパーツも typeになることSystem.__ComObject
です。次のステートメントのいずれかを試すと...
Document WebDoc = IEObj.Document;
HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);
...同じエラーメッセージが表示され続けます:
タイプ 'System.__ComObject' を 'System.Windows.Forms.HtmlElement' に暗黙的に変換することはできません (明らかに、変換先のタイプは とは異なります
IEObj.Document
)。
私は c# を初めて使用します (VBA から来たので、プログラミングに精通しています) が、VBA では、同等のものはまったく変換する必要なく完全に機能します。
それは私が間違っていることですか?それがオブジェクトの作成である場合、次は関数をテストするために使用したコードです (大まかに):
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.
}
私が実際にやりたいことは、さまざまな要素をラッチして、テキスト ボックスにテキストを入力したり、ボタンをクリックしたりできるようにすることです。また、Document 変数 ( Document.Body.InnerHtmlなど) も使用できるようにする必要があります。プロジェクト全体は、他のプロジェクトから参照される DLL に含まれる一連の関数になります。