Я использую следующий код, чтобы попытаться получить все значки в трее, в том числе скрытые в Windows 10.
public static List<AutomationElement> EnumNotificationIcons()
{
var data = new List<AutomationElement>();
foreach (var button in AutomationElement.RootElement.Find(
"User Promoted Notification Area").EnumChildButtons())
{
data.Add(button);
}
foreach (var button in AutomationElement.RootElement.Find(
"System Promoted Notification Area").EnumChildButtons())
{
data.Add(button);
}
var chevron = AutomationElement.RootElement.Find("Notification Chevron");
if (chevron != null && chevron.InvokeButton())
{
foreach (var button in AutomationElement.RootElement.Find(
"Overflow Notification Area").EnumChildButtons())
{
data.Add(button);
}
}
return data;
}
Однако возвращаемый список содержит только видимые значки. Все скрытое пропускается. Скрытые значки в трее не возвращаются.
Что мне здесь не хватает?
EDIT:
Я обновил код, чтобы он выглядел следующим образом. Все еще не тянет скрытые значки.
https://blogs.msdn.microsoft.com/oldnewthing/20141013-00/?p=43863
public static IEnumerable<AutomationElement> EnumNotificationIcons()
{
var userArea = AutomationElement.RootElement.Find("User Promoted Notification Area");
if (userArea != null)
{
foreach (var button in userArea.EnumChildButtons())
{
yield return button;
}
foreach (var button in userArea.GetTopLevelElement().Find("System Promoted Notification Area").EnumChildButtons())
{
yield return button;
}
}
var chevron = AutomationElement.RootElement.Find("Notification Chevron");
if (chevron != null && chevron.InvokeButton())
{
foreach (var button in AutomationElement.RootElement.Find("Overflow Notification Area").EnumChildButtons())
{
yield return button;
}
}
}