最近、ブログを書いているのですが、効率化をしようと思い「ブログ自動ログインツール」を使ってみました。 次にC#のSendKeys.sendメソッドを使って起動と実行を行ったのですが、 「ログイン情報が登録されていないか、読み込みに失敗しました」と出てしまい実行が出来ません。(ちゃんとライセンスは購入してあります。) また、他の外部ファイル(puttyやサウンドレコーダー)で試してみましたが、起動と実行が出来ました。 もちろん、手動で(普通にマウスで)やれば起動と実行ができます。 なぜ、「ブログ自動ログインツール」だと読み込みに失敗するのでしょうか? このツールの他のファイルにある「LoginData.xml」「BlogAutoLoginAutoUpdateTool.exe.config」というのが怪しいと思い 以下を参考にして「LoginData.xml」を実装してみました。 http://acha-ya.cocolog-nifty.com/blog/2012/10/xmlxml1-b0f6.html 「BlogAutoLoginAutoUpdateTool.exe.config」についてはプロジェクトの中にドラッグしてあげただけです。 どうすれば、SendKeys.sendメソッドを使って実行まで行えるようになるのでしょうか? xmlファイルの実装の仕方がおかしいのでしょうか? それともconfigファイルに何かするのでしょうか? 何か些細なことでもいいので、教えて頂けないでしょうか? 以下コードの抜粋です。 private void XMLReadTest() { string xmlPath = "C:\\ow_BlogAutoLoginAutoUpdateTool\\LoginData.xml"; string schemaPath = "C:\\ow_BlogAutoLoginAutoUpdateTool\\BlogAutoLoginAutoUpdateTool.exe"; XmlDocument xmlDocument = new XmlDocument(); // XML読込み&妥当性検証 XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; settings.Schemas.Add( GetXmlSchema( schemaPath ) ); XmlReader reader = XmlReader.Create( xmlPath, settings ); try { xmlDocument.Load( reader ); } finally { reader.Close(); } } private static XmlSchema GetXmlSchema(string schemaPath) { XmlSchema schema = new XmlSchema(); StreamReader reader = new StreamReader(schemaPath); try { schema = XmlSchema.Read(reader, null); } finally { reader.Close(); reader.Dispose(); } return schema; } private void button1_Click(object sender, EventArgs e) { System.Diagnostics.Process p = new System.Diagnostics.Process(); //起動するファイルを指定する p.StartInfo.FileName = "C:\\ow_BlogAutoLoginAutoUpdateTool\\BlogAutoLoginAutoUpdateTool.exe"; //イベントハンドラがフォームを作成したスレッドで実行されるようにする p.SynchronizingObject = this; //イベントハンドラの追加 p.Exited += new EventHandler(p_Exited); //プロセスが終了したときに Exited イベントを発生させる p.EnableRaisingEvents = true; //起動する p.Start(); System.Threading.Thread.Sleep(2500); SendKeys.Send("{ENTER}"); System.Threading.Thread.Sleep(2500); } private void p_Exited(object sender, EventArgs e) { //プロセスが終了したときに実行される MessageBox.Show("終了しました。"); } private void Form1_Load(object sender, EventArgs e) { } } }
↧