如何使用 win32 在 windows 中创建 window 焦点侦听器

How to create a window focus listener in windows using win32

是否可以创建一个监听器,在 Windows 操作系统中每次 window 失去焦点时监听,然后运行回调函数?我正在使用 win32api、win32net、wmi、win32gui、win32process。我正在使用 GetActiveWindow() 来获取我需要的信息,但我正在使用睡眠计时器执行此操作,我想知道是否有一个监听器,我可以在每次 window 焦点更改时附加一个处理程序来处理Windows 操作系统中的任何 window。

SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, 0, HandleWinEvent, 0, 0, WINEVENT_OUTOFCONTEXT )

void CALLBACK HandleWinEvent(HWINEVENTHOOK /*hook*/, DWORD event, HWND hwnd, 
                             LONG /*idObject*/, LONG /*idChild*/, 
                             DWORD dwEventThread, DWORD dwmsEventTime)
{
    if (event == EVENT_OBJECT_FOCUS )
    {
        DbgPrint("%u:%x %p\n", dwmsEventTime, dwEventThread, hwnd);
    }
}

这是在 Python 中使用 SetWinEventHook 的更详细示例:How to use winapi SetWinEventHook in python?