我设法在http://www.codeproject.com/KB/cs/globalhook.aspx的代码中使用C#和Win32 API获取mousse点击事件的位置(x,y)(使用版本1,因为我的版本2有问题) 但我想知道点击的是什么而不是屏幕上的位置。 例如,单击MS Word中的“粗体按钮”。 有没有办法存档?
提前致谢。
答案 0 :(得分:1)
您可以从WindowFromPoint或ChildWindowFromPointEx获取窗口句柄,然后使用GetWindowInfo等查询窗口句柄。我不认为从Word中识别按钮有一种简单的方法但是。
答案 1 :(得分:0)
查看属于UI自动化的AutomationElement.FromPoint() - 这套API通常由希望获取有关其他进程UI的信息的自动化测试和辅助功能应用程序使用。对于支持它的应用程序(Windows和大多数MS应用程序中的大多数UI),您可以获取有关UI元素的信息,而不仅仅是外部窗口。此示例应用程序打印出光标下项目的名称和类型(例如“按钮”)。
它在任何地方都不受支持,可能无法在许多非MS应用程序中运行(尽管Firefox支持);但至少会比WindowFromPoint等更好的结果。
// Compile using: csc ItemAtPoint.cs /r:UIAutomationClient.dll /r:WindowsBase.dll
using System;
using System.Windows.Automation;
using System.Windows.Forms;
class ItemAtPoint
{
public static void Main()
{
Console.WriteLine("Place pointer over item and hit return...");
Console.ReadLine();
// Get the AutomationElement that represents the window handle...
System.Windows.Point point = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
AutomationElement el = AutomationElement.FromPoint(point);
// Print out the type of the item and its name
Console.WriteLine("item is a \"{0}\" with name \"{1}\"", el.Current.LocalizedControlType, el.Current.Name);
}
}