首页 > 解决方案 > C# 中的 Windows 10 语言更改弹出菜单焦点问题

问题描述

我有一个 C# 类,负责在全球范围内监控焦点变化。

它通过SetWinEventHookwith工作EVENT_SYSTEM_FOREGROUND。有关详细信息,请参阅问题。

一切都很好,但有一个奇怪的问题......

当您通过Alt+Shift一个小菜单在 Windows 10 上更改语言时,会弹出一个您可以从中选择的系统上启用的语言。

好吧,你猜怎么着,那个东西也发送了一个焦点改变事件......

奇怪的部分是 - 在语言改变之前有焦点的过程有点......不会失去它吗?因为在该弹出菜单消失后,您不会获得焦点窗口的焦点更改事件。

例如,我在 Notepad++ 中输入文本(notepad++进程名称)并且我的程序注册了,当我通过Alt+Shift那个小弹出菜单更改语言时发送焦点事件(explorer进程名称)并且在消失时 Notepad++ 不发送焦点事件!

即使我之后在记事本++中做某事,我也不会得到它的焦点事件......

只有关注其他窗口(不是 Notepad++)才会发送焦点更改事件。

我该如何克服这个问题?

请记住,我仍然对explorer过程感兴趣,因为文件资源管理器具有该名称。所以,我不能忽略所有的进程explorer

PS我也用过这种全局焦点监控的方式,但是做的事情是一样的。

标签: c#winapiwindows-10focus

解决方案


推荐阅读