動作環境
Windows XP,7
.NET Framework 2.0以上
Aipoリマインダーで実装している自動ログインの方法を公開します。
1.ブラウザに渡すhtmlファイルを用意する
autologin.html
<html> <head> <noscript> <meta http-equiv="Refresh" content="0; url={0}"> </noscript> </head> <body onLoad="document.pform.submit();window.focus();"> <form name="pform" action="{0}" method="post"> <input type=hidden name="username" value="{1}"> <input type=hidden name="password" value="{2}"> <input type=hidden name="action" value="ALJLoginUser"> <input type=hidden name="org" value=""> </form> </body></html>```
基本的に、ログイン画面に設定されているパラメータのみをPOSTするようなhtmlを作成します。
{0}…ログイン画面のformのactionと同じ値
{1}…ログインユーザー名
{2}…パスワード
これ以外に必要なパラメータがあれば適宜追加すること。
<font size="-1">
よくよく考えたら、body onloadでsubmitしてるから「<meta http-equiv="Refresh" content="0; url={0}">」は要らなかったかも。
現状、これでうまく行っています。
</font>
##2.{0}〜{2}に値をセットする処理
値をセットしたものを別のファイルかリソースとして保持しておきます。
##3.ログイン情報のセット済みhtmlファイルをブラウザに渡す
ログイン情報のセット済みhtmlファイルをテンポラリディレクトリに作ります。
そのときのファイル名はランダムなものにしておき、拡張子は.htmlとします。
あとは、そのhtmlファイルをブラウザに渡すために、Process起動します。
コードを見た方が早いですね。
```c#:ThreadingManager.cs
using System;using System.Diagnostics;using System.IO;using System.Text;using System.Threading;using AipoReminder.Utility;using WinFramework.Utility;using System.Reflection;namespace AipoReminder.Manager{ class ThreadingManager { private string path = ""; public ThreadingManager() { } public void setBrowserPath(string path) { this.path = path; } public void Run() { if (SettingManager.AutoLogin) { // 自動ログイン用のファイルを作成 string fullPath = Path.GetTempPath(); fullPath += @"AipoReminder\"; string fileName = Path.GetRandomFileName(); fullPath += fileName; string changeFileName = Path.ChangeExtension(fullPath, ".html"); // Shift-Jisでファイルを作成 StreamWriter sw = new StreamWriter(changeFileName, true, Encoding.GetEncoding("Shift_Jis")); sw.WriteLine(SettingManager.AutoLoginHtml); // ストリームを閉じる sw.Close(); // ブラウザで表示 this.OpenUrl("\"" + changeFileName + "\""); } else { // ブラウザで表示 this.OpenUrl(""); } } /// <summary> /// 指定のURLを標準ブラウザで開く /// </summary> /// <param name="targetUrl"></param> private void OpenUrl(String targetUrl) { string arg = ""; if (String.IsNullOrEmpty(targetUrl)) { arg = SettingManager.Url; } else { arg = targetUrl; } ProcessStartInfo info = new ProcessStartInfo(); Process p = null; if ("".Equals(path)) { info.FileName = WinFramework.Utility.RegistryUtility.GetDefaultBrowserExePath(); info.WorkingDirectory =
Path.GetDirectoryName(
WinFramework.Utility.RegistryUtility.
GetDefaultBrowserExePath()); } else { info.FileName = path; info.WorkingDirectory = Path.GetDirectoryName(path); } info.Arguments = arg; p = Process.Start(info); p.WaitForInputIdle(60000); } }}```
SettingManager.AutoLoginは、自動ログインさせるかどうかの設定情報です。
SettingManager.AutoLoginHtmlは、ブラウザに渡すhtmlファイルに{0}〜{2}の値をセットしたリソースです。
WinFramework.Utility.RegistryUtilityは、レジストリからデフォルトのブラウザのパスを取得するUtilityです。
使い方はこのようになります。
ThreadingManager threadingManager = new ThreadingManager();
// ブラウザ指定で自動ログインする場合
//threadingManager.setBrowserPath("ブラウザの実行ファイルのパス");
Thread thread = new Thread(new ThreadStart(threadingManager.Run));
thread.Start();```