我設法得到位置(x,y)的摩絲點擊事件在窗口與C#和Win32 API從代碼在http://www.codeproject.com/KB/cs/globalhook.aspx(使用版本1,因爲我有一個版本2的問題) 但我想知道什麼是點擊不在屏幕上的位置。 例如,單擊MS Word中的「粗體按鈕」。 有沒有辦法將它歸檔?有沒有辦法讓任何窗口被點擊?
在此先感謝。
我設法得到位置(x,y)的摩絲點擊事件在窗口與C#和Win32 API從代碼在http://www.codeproject.com/KB/cs/globalhook.aspx(使用版本1,因爲我有一個版本2的問題) 但我想知道什麼是點擊不在屏幕上的位置。 例如,單擊MS Word中的「粗體按鈕」。 有沒有辦法將它歸檔?有沒有辦法讓任何窗口被點擊?
在此先感謝。
您可以從WindowFromPoint或ChildWindowFromPointEx獲取窗口句柄,然後用GetWindowInfo的。我不認爲有識別從Word一個按鈕一個平凡的方式查詢窗口句柄,雖然。
查看AutomationElement.FromPoint()這是UI自動化的一部分 - 這套API經常被自動化測試和輔助功能應用程序使用,這些應用程序想要獲取有關其他進程的UI的信息。對於支持它的應用程序(Windows中的大部分UI和大多數MS應用程序),您可以獲取有關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);
}
}
您建議的方式適用於我可以在屏幕上看到的任何應用程序嗎? – naokikun 2010-12-01 15:36:49