c# - 在任何 UI 中识别可点击元素是否位于鼠标指针下方的方法
问题描述
我正在使用 C# 进行应用程序开发,我的要求是自动化鼠标点击任何可点击的项目。 例如,如果鼠标指针位于资源管理器或桌面中的任何图标上,或者认为鼠标指针位于任何应用程序的可点击项/UI 元素上的某个时间间隔(如 3 秒)的按钮上,我的应用程序应该会收到通知/回调或有什么方法可以识别图标是否在可点击的 UI 元素上或任何其他方式上。
解决方案
在做了一些研究之后,我可以通过使用UI AUTOMATION来实现这一点,这要归功于@Fixation。我InvokePattern
用于按钮、TextPattern
EditBoxes 和TableItemPattern
表格。
以下是代码:
static void main(int[] args)
{
while (true)
{
System.Drawing.Point mouse = System.Windows.Forms.Cursor.Position;
AutomationElement element = AutomationElement.FromPoint(new System.Windows.Point(mouse.X, mouse.Y));
if (element == null)
{
// no element under mouse
return;
}
Console.WriteLine("Element at position " + mouse + " is '" + element.Current.Name + "'");
object pattern;
if (element.TryGetCurrentPattern(ValuePattern.Pattern, out pattern))
{
ValuePattern valuePattern = (ValuePattern)pattern;
Console.WriteLine(" Value=" + valuePattern.Current.Value);
}
if (element.TryGetCurrentPattern(InvokePattern.Pattern, out pattern))
{
InvokePattern invokePattern = (InvokePattern)pattern;
//invokePattern.Invoke();
Console.WriteLine(" invokePattern=" + invokePattern.ToString());
}
if (element.TryGetCurrentPattern(TableItemPattern.Pattern, out pattern))
{
TableItemPattern tableItemPattern = (TableItemPattern)pattern;
Mouse.MoveTo(new Point(mouse.X, mouse.Y));
Mouse.Click(MouseButton.Left); // Install Microsoft.TestApi from Nuget
Console.WriteLine(" TableItemPattern=" + tableItemPattern.ToString());
}
Thread.Sleep(1000);
}
}
希望这可以帮助!!!
推荐阅读
- javascript - 如何对合并的数组进行重复数据删除?
- selenium - 如何在线将价值从网站转移到 Windows 窗体?
- php - laravel DB查询选择多个表而不加入
- ios - Swift:在后台运行时计时器延迟触发
- html - 不确定如何为背景图像中的图像设置正确的路径
- admin-on-rest - 在 /admin 下挂载 react-admin
- python - Python 返回值只打印对象中的一个值,而不是所有值
- java - 如何在没有 Internet 连接的情况下使用 Maven 安装 JDBC 驱动程序
- swift - 闭包的弱变量之类的东西
- javascript - 状态更改后立即在 React 中获取最新的 Redux 状态