原文:
C# Winform在win10里弹出无焦点的窗口
当前用的是win10系统,怎么尝试都不行,没有任何效果,依旧焦点被弹出的窗口截取了。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangmy1988/article/details/78617139
有个项目需要在右下角弹出广告窗口,但是又不能影响用户的使用,窗口不能有焦点。
在网上搜了一堆,都是以下的代码,在form中添加一段样式。
protected override CreateParams CreateParams
{
get
{
const int WS_EX_NOACTIVATE = 0x08000000;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_NOACTIVATE;
return cp;
}
}
当前用的是win10系统,怎么尝试都不行,没有任何效果,依旧焦点被弹出的窗口截取了。
然后网上又找到了一段代码,是利用系统的API,先获取之前的激活的窗口,弹出新窗口了再重置之前窗口为激活,这样的话还是会影响之前的操作,不够完美。
//引用系统API
[DllImport("user32.dll")]
public static extern IntPtr GetActiveWindow();
[DllImport("user32.dll")]
public static extern IntPtr SetActiveWindow(IntPtr hwnd);
private AdForm mf = null;
private void button_Click(object sender, EventArgs e)
{
IntPtr activeForm = GetActiveWindow();//先得到当前的活动窗体
if (mf == null)
{
mf = new AdForm();
mf.Show();
}
SetActiveWindow(activeForm); //在把焦点还给之前的活动窗体
}
protected override CreateParams CreateParams
{
get
{
const int WS_EX_NOACTIVATE = 0x08000000;
const int WS_CHILD = 0x40000000;
CreateParams cp = base.CreateParams;
cp.Style |= WS_CHILD;
cp.ExStyle |= WS_EX_NOACTIVATE;
return cp;
}
}