Windows 7 中的屏幕键盘可让您在使用键盘输入时保持对文本框的关注。在 C# 和 .Net 中,如何强制另一个应用程序在接受输入时保持焦点,就像 Win7 屏幕键盘一样?或者更好的表述方式是,如何在与应用程序交互时不使我的应用程序获得焦点?
我尝试过 LockSetForegroundWindow,但没有看到任何结果。
我尝试过 LockSetForegroundWindow,但没有看到任何结果。
你需要在窗口上设置 WS_EX_NOACTIVATE
扩展样式。最简单的方法是使用 P/Invoke。
private const int WS_EX_NOACTIVATE = 0x08000000;
private const int GWL_EXSTYLE = -20;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
...
var window = new Window();
window.SourceInitialized += (s, e) => {
var interopHelper = new WindowInteropHelper(window);
int exStyle = GetWindowLong(interopHelper.Handle, GWL_EXSTYLE);
SetWindowLong(interopHelper.Handle, GWL_EXSTYLE, exStyle | WS_EX_NOACTIVATE);
};
window.Show();
您还可以使用WPF互操作类HwndSource
来创建窗口。它的构造函数接受扩展窗口样式。