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



目录
相关文章
|
4月前
|
Web App开发 数据采集 C#
解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
本文是一份实战指南,主要介绍了在使用Selenium和C#进行网页抓取时,如何设置代理服务器的身份验证以避免自动化流程中断。文章首先列出了所需的开发环境和工具,然后通过C#代码示例详细展示了如何在Firefox浏览器中设置代理IP、端口、用户名、密码以及UserAgent和Cookies。代码中包含了自动处理代理身份验证弹出窗口的配置,以及如何添加Cookies的方法。最后,文章强调了结合C#和Selenium可以提高网页抓取任务的稳定性和效率。
解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
|
6月前
|
C#
C# WinForm发送Email邮件
C# WinForm发送Email邮件
C# WinForm发送Email邮件
|
2月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
20天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
62 0
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
72 0
|
3月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
184 3
C#winform中使用SQLite数据库
|
3月前
|
数据库
C#Winform使用NPOI获取word中的数据
C#Winform使用NPOI获取word中的数据
177 2
|
4月前
|
数据采集 Web App开发 JavaScript
快速参考:用C# Selenium实现浏览器窗口缩放的步骤
在C#结合Selenium的网络爬虫应用中,掌握浏览器窗口缩放、代理IP、cookie与user-agent设置至关重要。本文详述了如何配置代理(如亿牛云加强版),自定义用户代理,启动ChromeDriver,并访问目标网站如抖音。通过执行JavaScript代码实现页面缩放至75%,并添加cookie增强匿名性。此策略有效规避反爬机制,提升数据抓取的准确度与范围。代码示例展示了整个流程,确保爬虫操作的灵活性与高效性。
111 3
|
6月前
|
设计模式 C#
36.c#:如何设置MDL窗口
36.c#:如何设置MDL窗口
51 1