メモ帳開いて勝手に保存(UI Automation)
コメント欄でアドバイスして下さったid:u338stevenさんのおかげで、
一気に保存まで達成。ありがとうございました。
前のUWSCでメモ帳保存のUI Automation版
1.メモ帳起動
2.「ああああああ」を書き込む
3.「テスト.txt」でカレントパスに保存
using System; using System.Collections.Generic; using System.Linq; using System.Diagnostics; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Automation; using System.Windows.Forms; namespace UIAutoPractice { class Program { private static readonly string PROCESS_NAME = @"notepad"; private static readonly int DEFAULT_WAIT_TIME = 1000; private static AutomationElement mainForm; static void Main(string[] args) { Process process = Process.Start(PROCESS_NAME); try { // メモ帳を起動します Thread.Sleep(DEFAULT_WAIT_TIME); mainForm = AutomationElement.FromHandle(process.MainWindowHandle); // ああああああ string InputText = "ああああああ"; // 入力準備 object valuePattern = null; if (!mainForm.TryGetCurrentPattern(ValuePattern.Pattern, out valuePattern)) { mainForm.SetFocus(); Thread.Sleep(100); SendKeys.SendWait(InputText); } else { mainForm.SetFocus(); ((ValuePattern)valuePattern).SetValue(InputText); } // 閉じる if (mainForm.TryGetCurrentPattern(WindowPattern.Pattern, out valuePattern)) { mainForm.SetFocus(); ((WindowPattern)valuePattern).Close(); } // フォーカス当たるまで待機 Thread.Sleep(1000); // 保存するかどうか聞かれた時のダイアログを取得 AutomationElement subForm = AutomationElement.FocusedElement; // 保存ボタン取得 var btn = subForm.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; // 保存実行 btn.Invoke(); // 再度保存するかどうか聞かれる場合があるため、若干待機させる Thread.Sleep(500); // 保存するかどうか聞かれた時のダイアログを取得 var SaveTextBoxElem = AutomationElement.FocusedElement as AutomationElement; SaveTextBoxElem.SetFocus(); // Test.txtでカレントパスに保存 SendKeys.SendWait("Test"); // Enterキー押下 SendKeys.SendWait("{ENTER}"); } finally { process.CloseMainWindow(); } } } }