2008/07/08(Tue) 14:02:44 編集(投稿者)
■No21706 (ひろこ さん) に返信
> VB6で作ったシステムをC#で作り直したいんですが・・・
この VB6 コードに、参照設定を加えるのは駄目ですか?
C# は、言語レベルでのレイトバインドをサポートしていないので、そのままの移植は面倒なのですけれども。
> C#での作り方を教えてください!!
リフレクションを使って無理やり実装すると、こんな感じ。
# 参照設定した場合は、もっと簡単に書けますけれども。
using System;
using System.Reflection;
using System.Runtime.InteropServices;
class Sample
{
static void Main()
{
//Set objIE = CreateObject("InternetExplorer.application")
Type tIE = Type.GetTypeFromProgID("InternetExplorer.Application");
object oIE = Activator.CreateInstance(tIE);
//objIE.Visible = True
tIE.InvokeMember("Visible", BindingFlags.SetProperty, null,
oIE, new object[] { true });
// objIE.Navigate "http://example.com/login.aspx"
tIE.InvokeMember("Navigate", BindingFlags.InvokeMethod, null,
oIE, new object[] { "http://example.com/login.aspx" });
// 3 秒ほど待機。(本当は DocumentCompleted イベントを待つべき)
System.Threading.Thread.Sleep(3000);
// document 及び all オブジェクトの取得
object document = tIE.InvokeMember("document", BindingFlags.GetProperty, null,
oIE, new object[] { });
object all = document.GetType().InvokeMember("all", BindingFlags.GetProperty, null,
document, new object[] { });
object element;
// objIE.document.All.txt_userid.Value = "ユーザー名"
element = all.GetType().InvokeMember("txt_userid", BindingFlags.GetProperty, null,
all, new object[] { });
element.GetType().InvokeMember("value", BindingFlags.SetProperty, null,
element, new object[] { "ユーザー名" });
if (element != null && Marshal.IsComObject(element)) Marshal.ReleaseComObject(element);
// objIE.document.All.txt_pass.Value = "パスワード"
element = all.GetType().InvokeMember("txt_pass", BindingFlags.GetProperty, null,
all, new object[] { });
element.GetType().InvokeMember("value", BindingFlags.SetProperty, null,
element, new object[] { "ユーザー名" });
if (element != null && Marshal.IsComObject(element)) Marshal.ReleaseComObject(element);
// objIE.document.All.btn_login.Click
element = all.GetType().InvokeMember("btn_login", BindingFlags.GetProperty, null,
all, new object[] { });
element.GetType().InvokeMember("click", BindingFlags.InvokeMethod, null,
element, new object[] { });
if (element != null && Marshal.IsComObject(element)) Marshal.ReleaseComObject(element);
// 解放処理
if (all != null && Marshal.IsComObject(all)) Marshal.ReleaseComObject(all);
if (document != null && Marshal.IsComObject(document)) Marshal.ReleaseComObject(document);
if (oIE != null && Marshal.IsComObject(oIE)) Marshal.ReleaseComObject(oIE);
}
}