C# Winform在win10里弹出无焦点的窗口

简介: 原文:C# Winform在win10里弹出无焦点的窗口 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangmy1988/article/details/78617139 有个项目需要在右下角弹出广告窗口,但是又不能影响用户的使用,窗口不能有焦点。
原文: C# Winform在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); //在把焦点还给之前的活动窗体  
        }


多次尝试后得到一个结果,必须给窗体添加WS_CHILD样式才能生效。最终代码如下

        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;
            }
        }



目录
相关文章
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
77 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
58 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
小程序 C#
C#WinForm实现Loading等待界面
上篇博客中解决了程序加载时屏幕闪烁的问题。 但是,加载的过程变得很缓慢。 这个给用户的体验也不是很好,我这里想加一个Loading的进度条。 项目启动的时候,加载进度条,界面UI加载完毕,进度条消失。
126 0
|
6月前
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
37 0
|
1月前
|
设计模式 C#
36.c#:如何设置MDL窗口
36.c#:如何设置MDL窗口
15 1
|
1月前
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
13 1
|
2月前
|
C#
C# Winform 选择文件夹和选择文件
C# Winform 选择文件夹和选择文件
44 0
|
7月前
|
程序员 C# 索引
C#之二十 Win Form对话框
C#之二十 Win Form对话框
40 0
|
5月前
|
开发框架 自然语言处理 文字识别
一款C#开发的窗口文本提取开源软件
一款C#开发的窗口文本提取开源软件
47 2