Warum wird das UIAutomation WindowOpened-Ereignis nicht ausgelöst?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Warum wird das UIAutomation WindowOpened-Ereignis nicht ausgelöst?

Post by Anonymous »

Ich möchte mich programmgesteuert bei der Clickonce-App anmelden.
Ich habe es mit dem folgenden Code versucht.
Diese App ist eine Aktienhandels-App (Kabus). wurde von der japanischen Firma au Kabucom Securities (https://kabu.com/tool/kabustation/default.html) entwickelt, daher ist eine Anmeldung erforderlich, um das Handelsfenster zu öffnen.
Auch diese App hat Verzögerung zwischen dem Zeitpunkt von „ClickOnce-Update-Überprüfungsdialog anzeigen“ und „Anmeldefenster wird geöffnet“ aufgrund von clickonece.
Ich würde gerne den Code ausführen, der die Benutzer-ID und das Passwort nach dem Öffnen des Anmeldefensters eingibt, also möchte ich das WindowOpened-Ereignis erkennen.< /p>
Aber jetzt passiert nichts, auch wenn der Event-Handler hinzugefügt wurde.
Ich habe auch überprüft, dass WindowOpened Event mit AccEvent ausgelöst wurde,
(https://learn.microsoft.com/en-us/windo ... nt-watcher)

aber es kann mit meinem C#-Code nicht verarbeitet werden.
Beachten Sie, dass dieser Code unter C# 9.0 ausgeführt wird
using System.Diagnostics;
using System.Windows.Automation;
using System.Text;

void onWindowOpened(object sender, AutomationEventArgs e)
{
AutomationElement? element;
try
{
element = sender as AutomationElement;
if (element == null)
{
Console.WriteLine("Element is null");
} else
{
Console.WriteLine("onWindowOpened!!");
LoginKabucom();
}
}
catch (ElementNotAvailableException)
{
Console.WriteLine("ElementNotAvailableException is happened");
}
}

Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Subtree, new AutomationEventHandler(onWindowOpened));
KillKabuS(); // Ensure the stock trade software is killed before start.
var p = StartKabuS();

void KillKabuS()
{
var processes = Process.GetProcesses();
foreach (var process in processes)
{
if (process.ProcessName.Contains("KabuS"))
{
Console.WriteLine("KabuS is included");
process.Kill(true);
process.WaitForExit();
break;
}
}
}

Process? StartKabuS()
{
var psi = new ProcessStartInfo();
var appref = "C:\\Users\\yuya\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\kabu.com\\kabuステーション.appref-ms";
psi.FileName = appref;
psi.UseShellExecute = true;
var p = Process.Start(psi);
return p;
}

void LoginKabucom(AutomationElement? elem)
{
// do something related to login
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post