没有关注,但允许互动?

Cor*_*urn 8 .net c# wpf

使用键盘键入时,Windows 7中的屏幕键盘可让您将焦点保持在文本框上.在C#和.Net中,如何在接受输入时强制另一个应用程序保持焦点,就像Win7屏幕键盘一样?或者也许是一个更好的方式来表达它,我怎么能不让我的应用程序在与之交互时关注?

我已经尝试过LockSetForegroundWindow并且没有看到它的结果.

Jul*_*ain 15

您必须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();
Run Code Online (Sandbox Code Playgroud)

您还可以使用WPF互操作类HwndSource来创建窗口.它的构造函数接受扩展窗口样式.

  • 工作惊人. (2认同)