【问题标题】:Get window handle of last activated window获取最后激活窗口的窗口句柄
【发布时间】:2009-05-20 00:02:47
【问题描述】:

我正在开发一个应用程序,它位于系统托盘中,可以在活动窗口上执行操作。但是当单击系统托盘中的图标时,GetForegroundWindow() 会返回任务栏。我需要获取在任务栏出现之前处于活动状态的窗口。

我尝试使用EnumWindowsGetWindow 枚举桌面窗口,但这通常会显示桌面小工具和其他最后不活动的顶级项目。是否有可能,或者当窗口被停用时信息完全丢失?

【问题讨论】:

    标签: c++ c winapi


    【解决方案1】:

    我认为获取该信息的唯一方法是在 WH_CALLWNDPROC 上安装系统范围的挂钩 (SetWindowsHookEx) 并捕获所有 WM_ACTIVATEAPP。这甚至可以让您跟踪哪个窗口在何时处于活动状态的完整历史记录。

    【讨论】:

    • 这很好用。但是,我有一个关于某些应用程序不受影响的问题,因为它们是 64 位的(如果我编译为 64 位,则为 32 位)。有什么想法吗?
    • 我可以同时连接 32 位和 64 位 DLL,并在两者之间使用某种进程间通信,但它看起来非常混乱。
    • 不幸的是,我认为没有一种干净的方法可以做到这一点,所以两个 DLL 和一些 IPC 是 ASFAIK 的唯一方法。
    • WH_CALLWNDPROC 的替代品,使用 WH_CBT,并寻找 HCBT_ACTIVATE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多