2

试图从我的 WPF 应用程序(它只是通过系统托盘运行)挖掘 win32 api。

当单击系统托盘图标时,我会向用户显示一个上下文菜单,该菜单会在最顶部的任何窗口上获得焦点。

我想处理那个窗口(那个刚刚失去焦点的窗口)并尝试使用不同的方法

GetForeGroundWindow()
GetTopWindow()
GetDesktopWindow()

然而没有尽头。我目前正在考虑遍历所有进程,以获取 MainWindowHandles 并检查每个窗口的 z 顺序。

但我认为有一种更简单/更智能的方法。只是我无法从我的旧 Petzold 书籍中搜索或回忆的一本。

另一种方法是让我的系统托盘菜单在激活时获得焦点?

谢谢!

4

2 回答 2

2

无论用户最终选择哪个菜单项,您都可以在打开菜单之前获得最顶层的窗口。

然后,如果您需要最顶层的窗口,您可以使用在打开菜单之前获得的值。

于 2009-03-11T09:25:23.237 回答
0

我认为没有什么比您描述的 z-index 迭代更简单的了。您的系统托盘菜单必须获得焦点,否则人们将无法使用它(例如,使用键盘)。如果它获得焦点,则它成为前景窗口,因此旧的前景窗口与系统中的任何其他非活动窗口没有任何区别。确实,z-index 检查恕我直言是唯一的方法。

于 2009-03-11T09:24:44.597 回答