コンソール アプリで動作する UIAutomation を使用したコードがありますが、サービスとして実行する必要があります。このサービスは、特定のマシンで 3 つの exe が実行され、それらが正しく構成されていることを確認します。C++ で記述された exe への COM または .net エントリ ポイントはありません。
var k = Process.GetProcessesByName("genericEXE");
foreach (var win in k)
{
List<string> scol = new List<string>();
AutomationElement cpc = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ProcessIdProperty, win.Id));
if (cpc == null)
continue;
WalkEnabledElements(cpc, scol);
if (scol.Contains("COM1") && scol.Contains("COM2") && scol.Contains("COM3") && scol.Contains("COM4") && scol.Contains("COM5"))
foundCom1 = true;
if (scol.Contains("COM6") && scol.Contains("COM7") && scol.Contains("COM8") && scol.Contains("COM9") && scol.Contains("COM10"))
foundCom6 = true;
if (scol.Contains("COM11") && scol.Contains("COM12") && scol.Contains("COM13") && scol.Contains("COM14") && scol.Contains("COM15"))
foundCom11 = true;
}
static void WalkEnabledElements(AutomationElement rootElement, List<string> col)
{
TreeWalker walker = new TreeWalker(Condition.TrueCondition);
AutomationElement elementNode = walker.GetFirstChild(rootElement);
while (elementNode != null)
{
Console.WriteLine(elementNode.Current.Name);
col.Add(elementNode.Current.Name);
WalkEnabledElements(elementNode, col);
elementNode = walker.GetNextSibling(elementNode);
}
}
これが実行されている間にログオンしているのと同じユーザーとしてサービスを実行しようとしました.デスクトップビットとの対話をオンにしてローカルサービスとして実行しようとしました. から AutomationElement を取得することはありません
AutomationElement cpc = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ProcessIdProperty, win.Id));
ライン。私が別の方法で何をする必要があるかについて誰かが考えましたか?