强制窗口在打开时具有焦点

时间:2014-01-09 23:19:55

标签: c# wpf windows

我有一个WPF应用程序,它通过套接字连接与C ++ MFC应用程序通信。如果用户按下C ++应用程序中的特定按钮,则会显示一个新的WPF窗口。

以下是调用以启动WPF窗口的代码:

var window = new Window();
window.Topmost = true;
window.Show();
window.Activate();
window.Topmost = false;

在某些机器上,以这种方式显示的第一个窗口(以及仅第一个窗口)将不具有键盘焦点。它将在C ++应用程序的前面,但C ++应用程序仍将具有键盘焦点。我还能做些什么来强制WPF窗口每次都能获得键盘焦点吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

var window = new Window();    
window.Show();
window.Activate();
window.Focus();
window.Topmost = true;
window.Topmost = false;

答案 1 :(得分:1)

您是否尝试过Focusable上的Window设置为true,然后调用window.Focus()

答案 2 :(得分:1)

事实证明window.Activate()正在返回false。看看这种方法documentation,它说,

  

确定窗口是否已激活的规则与Win32 SetForegroundWindow函数(User32.dll)使用的规则相同。

SetForegroundWindow的文档,然后声明:

  

可以设置前台窗口的进程可以通过调用AllowSetForegroundWindow函数启用另一个进程来设置前台窗口。

因此,解决方案是让C ++应用程序使用AllowSetForegroundWindow函数为WPF应用程序授予设置前景窗口的权限。