Есть ли способ получить то, что нажимается в любых окнах? - PullRequest
1 голос
/ 30 ноября 2010

Мне удалось получить позицию (x, y) события нажатия мышкой в ​​окнах с C # и Win32 API из кода на http://www.codeproject.com/KB/cs/globalhook.aspx (с использованием Версии 1, потому что у меня проблема с версией 2) Но яхочу знать, что нажимается не позиция на экране.Например, нажмите «Жирная кнопка» в MS Word.Есть ли способ архивировать это?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Вы можете получить дескриптор окна из WindowFromPoint или ChildWindowFromPointEx , затем запросить дескриптор окна с помощью GetWindowInfo и т. Д. Я не думаю, что есть тривиальный способоднако, чтобы определить кнопку из Word.

0 голосов
/ 16 марта 2011

Ознакомьтесь с AutomationElement.FromPoint () , который является частью автоматизации пользовательского интерфейса - этот набор API часто используется приложениями автоматического тестирования и специальных возможностей, которые хотят получить информацию об интерфейсе других процессов. Для приложений, которые его поддерживают (большая часть пользовательского интерфейса в Windows и большинство приложений MS), вы можете получить информацию об элементе пользовательского интерфейса, а не только о внешнем окне. В этом примере приложения выводится имя и тип (например, «кнопка») элемента под курсором.

Это не поддерживается везде, может не работать во многих приложениях не от 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...