Подтвердить что ты не робот

С#: определение того, какое приложение имеет фокус

Я ищу создать приложение С#, которое изменяет содержимое, в соответствии с которым в настоящее время приложение фокусируется. Поэтому, если пользователь использует Firefox, мое приложение это узнает. То же самое для Chrome, Visual Studio, TweetDeck и т.д.

Возможно ли это, и если да - как я могу его достичь?

У меня есть чувство, о котором я прошу многое, но стоит попробовать.

Большое спасибо заранее.

4b9b3361

Ответ 1

Посмотрите Application.AddMessageFilter и найдите сообщения WM_ACTIVATEAPP, которые расскажут вам, когда приложение активировано, т.е. получает фокус.

Ответ 2

Это можно сделать в чистом .NET, используя Механизм автоматизации, который является частью WPF. Добавьте ссылки на UIAutomationClient и UIAutomationTypes и используйте Automation.AddAutomationFocusChangedEventHandler, например:

public class FocusMonitor
{
    public FocusMonitor()
    {
        AutomationFocusChangedEventHandler focusHandler = OnFocusChanged;
        Automation.AddAutomationFocusChangedEventHandler(focusHandler);
    }

    private void OnFocusChanged(object sender, AutomationFocusChangedEventArgs e)
    {
        AutomationElement focusedElement = sender as AutomationElement;
        if (focusedElement != null)
        {
            int processId = focusedElement.Current.ProcessId;
            using (Process process = Process.GetProcessById(processId))
            {
                Debug.WriteLine(process.ProcessName);
            }
        }
    }
}

Ответ 3

Grrr. Как это часто бывает, я провел некоторое время в Google, прежде чем публиковать этот вопрос.

Как только я наконец разместил вопрос, мой следующий поиск Google показал ответ.

Мне еще предстоит проверить его, но похоже, что GetForegroundWindow() - это ключ.

Вместо того, чтобы переписать то, что уже написано, вот ссылка на страницу, которая предоставила информацию:

http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

Заявления для любого времени, которое я потратил впустую, задав ответ Googalable (?).