不要集中注意力,但要允许互动

本文关键字:许互动 注意力 集中 | 更新日期: 2023-09-27 18:03:33

Windows 7的屏幕键盘可以让你在使用键盘打字时将注意力集中在文本框上。在c#和。net中,我如何强制另一个应用程序在接受输入的同时保持焦点,就像Win7屏幕键盘一样?或者更确切地说,我怎么能让我的应用在互动时不集中注意力呢?

我已经尝试过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来创建你的窗口。它的构造函数接受扩展窗口样式。