2010-11-30 3 views
1

Ich habe es geschafft, die Position (x, y) von Mousse angeklickt Ereignis in Windows mit C# und Win32 API aus dem Code http://www.codeproject.com/KB/cs/globalhook.aspx (mit Version 1, weil ich ein Problem mit Version 2 habe) Aber ich möchte wissen, was ist klickte nicht die Position auf dem Bildschirm. Klicken Sie zum Beispiel in MS Word auf die Schaltfläche "Fett". Gibt es eine Möglichkeit, dies zu archivieren?Gibt es eine Möglichkeit zu erhalten, was in einem beliebigen Fenster geklickt wird?

Vielen Dank im Voraus. obwohl

Antwort

1

Sie können einen Fenstergriff aus WindowFromPoint oder ChildWindowFromPointEx, dann abfragen, um den Fenstergriff mit GetWindowInfo usw. holen Das glaube ich nicht, dass es eine triviale Weise eine Schaltfläche aus Word, zu identifizieren.

+0

Ist die Art, wie Sie vorschlagen, wird für jede Anwendung funktionieren, die ich auf dem Bildschirm sehen kann? – naokikun

0

Sehen Sie sich die AutomationElement.FromPoint() an, die Teil der UI-Automatisierung ist - diese API-Suite wird häufig von automatisierten Test- und Barrierefreiheits-Apps verwendet, die Informationen über die Benutzeroberfläche anderer Prozesse abrufen möchten. Für Apps, die dies unterstützen (die meisten Benutzeroberflächen in Windows und den meisten MS-Anwendungen), können Sie Informationen über das Benutzeroberflächenelement erhalten, nicht nur das äußere Fenster. Diese Beispiel-App gibt den Namen und den Typ (z. B. "Schaltfläche") des Elements unter dem Cursor aus.

Es wird nicht überall unterstützt, funktioniert möglicherweise nicht in vielen Nicht-MS-Anwendungen (obwohl es von Firefox unterstützt wird); aber wird Ihnen mindestens bessere Ergebnisse als WindowFromPoint usw.

// 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); 
    } 
} 
Verwandte Themen