gpt4 book ai didi

C# AutomationElement - 获取包括隐藏在内的所有托盘图标 (Windows 10)

转载 作者:行者123 更新时间:2023-12-03 11:06:43 27 4
gpt4 key购买 nike

我正在使用以下代码尝试获取所有托盘图标,包括被 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;
}

但是返回的列表只包含可见图标。任何隐藏的内容都会被跳过。隐藏的托盘图标不会被返回。

我在这里错过了什么?

编辑:

我已经将代码更新为如下所示。仍然没有拉入隐藏的图标。 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;
}
}
}

最佳答案

我能够通过以下代码实现这一点。我不得不强制它出现。

    /// <summary>
/// Enums the notification icons in the Tray.
/// </summary>
/// <returns>List of Notification Icons from the Tray.</returns>
public static IEnumerable<AutomationElement> EnumNotificationIcons()
{
var userArea = AutomationElement.RootElement.Find(UINotificationAreaConstants.UserPromotedNotificationArea);
if (userArea != null)
{
foreach (var button in userArea.EnumChildButtons())
{
yield return button;
}

foreach (var button in userArea.GetTopLevelElement().Find(UINotificationAreaConstants.SystemPromotedNotificationArea).EnumChildButtons())
{
yield return button;
}
}

var chevron = AutomationElement.RootElement.Find(UINotificationAreaConstants.NotificationChevron);
if (chevron != null && chevron.InvokeButton())
{
var elm = AutomationElement.RootElement.Find(
UINotificationAreaConstants.OverflowNotificationArea);

WaitForElm(elm);

foreach (var button in elm.EnumChildButtons())
{
yield return button;
}
}
}

/// <summary>
/// Waits for elm to be ready for processing.
/// </summary>
/// <param name="targetControl">The target control.</param>
/// <returns>The WindowPattern.</returns>
private static WindowPattern WaitForElm(AutomationElement targetControl)
{
WindowPattern windowPattern = null;

try
{
windowPattern =
targetControl.GetCurrentPattern(WindowPattern.Pattern)
as WindowPattern;
}
catch (InvalidOperationException)
{
// object doesn't support the WindowPattern control pattern
return null;
}
// Make sure the element is usable.
if (!windowPattern.WaitForInputIdle(10000))
{
// Object not responding in a timely manner
return null;
}
return windowPattern;
}

关于C# AutomationElement - 获取包括隐藏在内的所有托盘图标 (Windows 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55055110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com