【发布时间】:2020-07-16 01:51:52
【问题描述】:
我正在使用SetWindowsHookEx 注册一个全局热键,该热键应该可以激活我的 WPF 窗口并将其置于最前面。
我发现 3 个不同的函数似乎都实现了相同的目标,Window.Activate、SwitchToThisWindow 和 SetForegroundWindow。我注意到,在 Visual Studio 中调试时,使我的窗口成为焦点的所有 3 种方法的行为都符合预期,但是当编译的程序在 VS 调试器之外运行时未能正确激活它。
I created a small example project 来说明问题。该应用程序只显示窗口的Activated/Deactivated 和GotKeyboardFocus/LostKeyboardFocus 事件,以及它捕获的最后一个键。它将3种不同的激活方法绑定到全局热键1-3。
下面是两个带有和不带有调试模式的应用程序的 GIF。两次我都使用全局热键从当前聚焦的记事本窗口切换到我的应用程序,然后只需按一些键。
两个窗口都接收Activated 和GotKeyboardFocus 事件,但只有在调试模式下,应用程序才会真正接收按键。在没有调试模式的情况下运行时,标题栏也不会从灰色变为黑色,这表明该窗口从未真正激活过。
在 VS 中运行
在 VS 之外运行
【问题讨论】:
标签: c# wpf windows visual-studio .net-core