尝试从我的WPF应用程序(仅通过系统托盘运行)深入研究win32 api。
当点击系统托盘图标时,我会向用户显示一个上下文菜单,该窗口会在最顶层的窗口上获得焦点。
我希望得到一个窗口的句柄(那个刚刚失去焦点的窗口)并尝试使用不同的方法
GetForeGroundWindow()
GetTopWindow()
GetDesktopWindow()
然而,永无止境。我正在考虑迭代所有进程,获取MainWindowHandles并检查每个窗口的z顺序。
但我估计有一种更简单/更聪明的方式;只是一个我不能谷歌或从我的旧Petzold书中回忆。
另一种方法是我的系统托盘菜单不在激活时获得焦点?
谢谢!
答案 0 :(得分:2)
无论用户最终会选择哪个菜单项,您都可以在打开菜单之前获得最顶层的窗口。
然后,如果你需要最顶层的窗口,你可以在打开菜单之前使用你得到的值。
答案 1 :(得分:0)
我认为没有比你描述的z-index迭代更简单的东西了。您的系统托盘菜单具有以获得焦点,因为否则人们将无法使用它(例如,使用键盘)。如果它获得焦点,则它变为前景窗口,因此旧的前景窗口与系统中的任何其他不活动窗口没有任何区别。确实,z-index检查恕我直言是唯一的方法。