C#窗口置顶不具有输入焦点
时间: 2023-08-21 20:02:48 浏览: 128
窗口内不获得焦点, 类似输入法
4星 · 用户满意度95%
在#中,可以使用以下代码实现窗口置顶但不具有输入焦点的效果:
```csharp
using System.Runtime.InteropServices;
using System.Windows.Forms;
public partial class Form1 : Form
{
// 导入Windows API函数
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
// 窗口置顶参数
private const uint SWP_NOMOVE = 0x0002;
private const uint SWP_NOSIZE = 0x0001;
private const uint SWP_NOACTIVATE = 0x0010;
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 窗口置顶并失去输入焦点
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
this.TopLevel = false;
this.TopMost = true;
this.Focus();
}
}
```
在以上代码中,当点击按钮时,先调用SetWindowPos函数将当前窗口置顶但不占用焦点,然后通过设置TopLevel、TopMost属性和调用Focus方法实现失去输入焦点的效果。
阅读全文