我有一个用C#编写的winform应用程序。这个应用程序应该在桌面上显示通知,这些通知是不可交互的,不应该获得焦点。现在我已经知道如何在后台(在所有其他应用程序后面)生成窗口,并使它们不可交互。尽管它们被禁用,但每次我点击一个窗口,Windows的“叮”声都会播放。
有没有一种方法可以让表单Enabled = false;
在尝试单击时不发出叮的声音?
除了禁用表单,我还尝试捕获所有的单击事件并防止聚焦,但到目前为止还没有成功。
下面是我用来创建windows窗体的代码。
using System.Runtime.InteropServices;
namespace Background_Notes;
public partial class Note : Form
{
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
static readonly IntPtr HwndBottom = new IntPtr(1);
const UInt32 SwpNosize = 0x0001;
const UInt32 SwpNomove = 0x0002;
const UInt32 SwpNoactivate = 0x0010;
public Note()
{
InitializeComponent();
ShowInTaskbar = false;
FormBorderStyle = FormBorderStyle.None;
SetStyle(ControlStyles.Selectable, false);
TextBox t = new TextBox();
t.Width = 200;
t.Text = "This is a notification!";
Controls.Add(t);
Show();
SetWindowPos(Handle, HwndBottom, 0, 0, 0, 0, SwpNomove | SwpNosize | SwpNoactivate);
Enabled = false;
}
protected override bool ShowWithoutActivation => true;
}
1条答案
按热度按时间j1dl9f461#
要使窗口始终处于非活动状态,请将WS_EX_NOACTIVATE应用于extended window style。无需禁用窗体。