■92193 / inTopicNo.5) |
Re[3]: 既存アプリにショートカットキーを投げたい |
□投稿者/ 魔界の仮面弁士 (2344回)-(2019/08/30(Fri) 19:19:53)
|
2019/08/30(Fri) 19:31:23 編集(投稿者)
■No92187 (こまお さん) に返信 >> UIAutomation を使ってみるのはどうでしょう。 > 良さそうなのを教えていただきありがとうございます。早速サンプルを漁っているのですが、 > キーボードのエミュレーションみたいなのが見当たりません。おすすめのURLってありますか?
Codeer.Friendly だとこんな感じ。 https://www.kompira.jp/column/operate_windows_gui/
UIAutomation だとこのあたり。 https://docs.microsoft.com/ja-jp/dotnet/framework/ui-automation/ui-automation-text-pattern-how-to-topics
private Process notepad; private void Button_Click_1(object sender, RoutedEventArgs e) { this.notepad = Process.Start("notepad.exe"); this.notepad.WaitForInputIdle(); } private async void Button_Click_2(object sender, RoutedEventArgs e) { // メモ帳のテキスト部に「魔界の仮面弁士」と書き込む var elmNotepad = AutomationElement.FromHandle(this.notepad.MainWindowHandle); var elmEditBox = elmNotepad.FindFirst(TreeScope.Children, new AndCondition(new OrCondition( new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit), new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document)), new PropertyCondition(AutomationElement.ClassNameProperty, "Edit"))); object patValue; if (elmEditBox.TryGetCurrentPattern(ValuePattern.Pattern, out patValue)) { ((ValuePattern)patValue).SetValue("魔界の仮面弁士"); } else { elmEditBox.SetFocus(); await Task.Delay(100); SendKeys.SendWait("魔界の仮面弁士"); } } private void Button_Click_3(object sender, RoutedEventArgs e) { // メモ帳のテキスト部に書かれている文字列を取得する var elmNotepad = AutomationElement.FromHandle(this.notepad.MainWindowHandle); var elmEditBox = elmNotepad.FindFirst(TreeScope.Children, new AndCondition(new OrCondition( new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit), new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document)), new PropertyCondition(AutomationElement.ClassNameProperty, "Edit"))); var patText = (TextPattern)elmEditBox.GetCurrentPattern(TextPattern.Pattern); textBlock1.Text = patText.DocumentRange.GetText(-1); } private void Button_Click_4(object sender, RoutedEventArgs e) { // メモ帳のタイトルバーの「閉じる」ボタンをクリック var elmNotepad = AutomationElement.FromHandle(this.notepad.MainWindowHandle); var elmTitleBar = elmNotepad.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TitleBar)); var elmCloseButton = elmTitleBar.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "閉じる")); var patInvoke = (InvokePattern)elmCloseButton.GetCurrentPattern(InvokePattern.Pattern); patInvoke.Invoke(); }
|
|