Ответ 1
Посмотрите Application.AddMessageFilter
и найдите сообщения WM_ACTIVATEAPP, которые расскажут вам, когда приложение активировано, т.е. получает фокус.
Я ищу создать приложение С#, которое изменяет содержимое, в соответствии с которым в настоящее время приложение фокусируется. Поэтому, если пользователь использует Firefox, мое приложение это узнает. То же самое для Chrome, Visual Studio, TweetDeck и т.д.
Возможно ли это, и если да - как я могу его достичь?
У меня есть чувство, о котором я прошу многое, но стоит попробовать.
Большое спасибо заранее.
Посмотрите Application.AddMessageFilter
и найдите сообщения WM_ACTIVATEAPP, которые расскажут вам, когда приложение активировано, т.е. получает фокус.
Это можно сделать в чистом .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);
}
}
}
}
Grrr. Как это часто бывает, я провел некоторое время в Google, прежде чем публиковать этот вопрос.
Как только я наконец разместил вопрос, мой следующий поиск Google показал ответ.
Мне еще предстоит проверить его, но похоже, что GetForegroundWindow()
- это ключ.
Вместо того, чтобы переписать то, что уже написано, вот ссылка на страницу, которая предоставила информацию:
http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/
Заявления для любого времени, которое я потратил впустую, задав ответ Googalable (?).