如何监控焦点变化?

11 c# c++ vb.net vbscript batch-file

好吧有时候我正在打字,而且很少发生某些东西偷的重点,我读了一些解决方案(甚至是VB手表),但它们并不适用于我.是否有任何窗口范围的"手柄"可以处理任何焦点变化?

不要紧,在语言,C,C++,VB.NET,C#,任何.NET或窗口有关,批次,PoweShell,VBS脚本......只要我能够监控每一个重点的变化,并登录到文件/ cmd窗口/可视窗口.

就像是:

   void event_OnWindowsFocusChange(int OldProcID, int NewProcID);
Run Code Online (Sandbox Code Playgroud)

会非常有用的.或者也许已经有了这方面的工具(我找不到?)

Mik*_*ray 17

一种方法是使用Windows UI Automation API.它揭示了一个全球焦点变化的事件.这是我想出的一个快速示例(在C#中).注意,您需要添加对UIAutomationClient和UIAutomationTypes的引用.

using System.Windows.Automation;
using System.Diagnostics;

namespace FocusChanged
{
    class Program
    {
        static void Main(string[] args)
        {
            Automation.AddAutomationFocusChangedEventHandler(OnFocusChangedHandler);
            Console.WriteLine("Monitoring... Hit enter to end.");
            Console.ReadLine();
        }

        private static void OnFocusChangedHandler(object src, AutomationFocusChangedEventArgs args)
        {
            Console.WriteLine("Focus changed!");
            AutomationElement element = src as AutomationElement;
            if (element != null)
            {
                string name = element.Current.Name;
                string id = element.Current.AutomationId;
                int processId = element.Current.ProcessId;
                using (Process process = Process.GetProcessById(processId))
                {
                    Console.WriteLine("  Name: {0}, Id: {1}, Process: {2}", name, id, process.ProcessName);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)