forms+windows添加激活水印

forms+windows添加激活水印

  1. 多语言水印文本,根据系统语言自动切换。
  2. 水印显示在每个屏幕的右下角,位置动态调整。
  3. 半透明灰色文字,微软雅黑字体。
  4. 窗口无边框、置顶、透明背景,不干扰用户操作。
  5. 支持多显示器。
  6. 高DPI适配。

效果图:
在这里插入图片描述

step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp37\WinFormsApp37\Program.cs

namespace WinFormsApp37;static class Program
{/// <summary>///  The main entry point for the application./// </summary>[STAThread]static void Main(){Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);Application.EnableVisualStyles();foreach (var screen in Screen.AllScreens){new WatermarkForm(screen).Show();}Application.Run();}
}

step2:C:\Users\wangrusheng\RiderProjects\WinFormsApp37\WinFormsApp37\WatermarkForm.cs

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace WinFormsApp37;public class WatermarkForm : Form
{[DllImport("user32.dll")]static extern int GetWindowLong(IntPtr hWnd, int nIndex);[DllImport("user32.dll")]static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);const int GWL_EXSTYLE = -20;const int WS_EX_LAYERED = 0x80000;const int WS_EX_TRANSPARENT = 0x20;private readonly string text1, text2;private readonly Font font = new Font("Microsoft YaHei", 20, FontStyle.Regular);public WatermarkForm(Screen screen){// 初始化窗口属性InitializeWindow();// 加载多语言文本var translations = LoadTranslations();string lang = CultureInfo.CurrentCulture.TwoLetterISOLanguageName;text1 = translations.TryGetValue($"{lang}_line1", out var t1) ? t1 : "Activate Windows";text2 = translations.TryGetValue($"{lang}_line2", out var t2) ? t2 : "Go to Settings to activate Windows";// 计算窗口位置CalculatePosition(screen);}private void InitializeWindow(){FormBorderStyle = FormBorderStyle.None;TopMost = true;BackColor = Color.Magenta;TransparencyKey = Color.Magenta;ShowInTaskbar = false;// 设置窗口样式int style = GetWindowLong(Handle, GWL_EXSTYLE);SetWindowLong(Handle, GWL_EXSTYLE, style | WS_EX_LAYERED | WS_EX_TRANSPARENT);}private Dictionary<string, string> LoadTranslations() => new(){["zh_line1"] = "激活 Windows",["zh_line2"] = "转到“设置”以激活 Windows",["en_line1"] = "Activate Windows",["en_line2"] = "Go to Settings to activate Windows",// 其他语言翻译...};private void CalculatePosition(Screen screen){using var g = CreateGraphics();var size1 = g.MeasureString(text1, font);var size2 = g.MeasureString(text2, font);int width = (int)Math.Max(size1.Width, size2.Width) + 20;int height = (int)(size1.Height + size2.Height) + 10;Location = new Point(screen.Bounds.Right - width - 50,screen.Bounds.Bottom - height - 80);Size = new Size(width, height);}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);using var brush = new SolidBrush(Color.FromArgb(160, 120, 120, 120));e.Graphics.DrawString(text1, font, brush, 0, 0);e.Graphics.DrawString(text2, font, brush, 0, font.Height + 2);}
}

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode --- 444 周赛

题目列表 3507. 移除最小数对使数组有序 I 3508. 设计路由器 3509. 最大化交错和为 K 的子序列乘积 3510. 移除最小数对使数组有序 II 一、移除最小数对使数组有序 I & II 由于数组是给定的&#xff0c;所以本题的操作步骤是固定的&#xff0c;我们只要能快速模拟操作的过…

限流、降级、熔断、隔离?

在微服务架构中&#xff0c;服务限流、降级、熔断和隔离是保障系统高可用性的核心手段&#xff0c;但它们解决的问题和应用场景不同。以下是它们的区别、解决方案和实际案例的详细说明&#xff1a; 一、服务限流&#xff08;Rate Limiting&#xff09; 定义&#xff1a;通过限…

Day22 -php开发01--留言板+知识点(超全局变量 文件包含 数据库操作 第三方插件)

环境要求&#xff1a;php7.0.9 小皮 navicat phpstorm24.1 知识点&#xff1a;会写&#xff08;留言板 留言板后台&#xff09; 超全局变量 三方插件的使用 文件包含 1、开启小皮并利用navicat新建一个数据库 注意&#xff1a;本地的服务mysql关闭后 才可打开小皮。属…

制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)

AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…

LeetCode 解题思路 37(Hot 100)

解题思路&#xff1a; 初始化&#xff1a; 初始化最大举行 max 和栈 stack。左右补零&#xff1a; 考虑柱子递增的边界情况&#xff0c; 初始化填充柱状图 newHeights。遍历处理&#xff1a; 对于每一根遍历到的柱子 newHeights[i]&#xff0c;若柱子高度小于栈口索引&#xf…

HTML — 过渡与动画

HTML过渡与动画是提升网页交互体验的核心技术&#xff0c;主要通过CSS实现动态效果。 过渡 CSS过渡&#xff08;Transition&#xff09;介绍 适用于元素属性变化时的平滑渐变效果&#xff0c;如悬停变色、尺寸调整。通过定义transition-property&#xff08;过渡属性&#xf…

跨站请求是什么?

介绍 跨站请求&#xff08;Cross-Site Request&#xff09;通常是指浏览器在访问一个网站时&#xff0c;向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要&#xff0c;尤其是在涉及到“跨站请求伪造&#xff08;CSRF&#xff09;”和“跨域资源共享&#xff…

Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用

前言 重学Top10的第二篇&#xff0c;希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造&#xff0c;是一种由服务端发起的恶意请求&#xff0c;SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理&#xff0c;执行攻击者构造…

Hibernate:让对象与数据库无缝对话的全自动ORM框架

一、为什么需要全自动ORM&#xff1f; 在手动编写SQL的时代&#xff0c;开发者需要在Java代码和数据库表之间来回切换&#xff1a; // Java对象 public class User {private Long id;private String name;// getters and setters }// SQL语句 SELECT * FROM user WHERE id ?…

C语言超详细指针知识(一)

通过前面一段时间C语言的学习&#xff0c;我们了解了数组&#xff0c;函数&#xff0c;操作符等的相关知识&#xff0c;今天我们将要开始进行指针的学习&#xff0c;这是C语言中较难掌握的一个部分&#xff0c;一定要认真学习&#xff01;&#xff01;&#xff01; 1.内存与地址…

程序化广告行业(70/89):ABTester系统助力落地页优化实践

程序化广告行业&#xff08;70/89&#xff09;&#xff1a;ABTester系统助力落地页优化实践 在程序化广告领域摸爬滚打多年&#xff0c;深知持续学习和知识共享的重要性。写这篇博客&#xff0c;就是希望能和大家一起深入探索程序化广告行业&#xff0c;共同学习、共同进步。今…

项目管理(高软56)

系列文章目录 项目管理 文章目录 系列文章目录前言一、进度管理二、配置管理三、质量四、风险管理五、真题总结 前言 本节主要讲项目管理知识&#xff0c;这些知识听的有点意思啊。对于技术人想创业&#xff0c;单干的都很有必要听听。 一、进度管理 二、配置管理 三、质量 四…

常见的后缀名

.exe .exe&#xff08;“executable”&#xff08;可执行的&#xff09;&#xff09;是 Windows 操作系统中最常见的可执行文件扩展名。此类文件包含了计算机能够直接运行的机器码指令。当用户双击 .exe 文件时&#xff0c;操作系统会读取其中的指令并执行相应的程序或任务。…

XILINX DDR3专题---(1)IP核时钟框架介绍

1.什么是Reference Clock&#xff0c;这个时钟一定是200MHz吗&#xff1f; 2.为什么APP_DATA是128bit&#xff0c;怎么算出来的&#xff1f; 3.APP &#xff1a;MEM的比值一定是1:4吗&#xff1f; 4.NO BUFFER是什么意思&#xff1f; 5.什么情况下Reference Clock的时钟源可…

Doris 安装部署、实际应用及优化实践:对比 ClickHouse 的深度解析

在实时分析、报表系统以及高并发 OLAP 查询等场景中&#xff0c;列式存储数据库因其卓越的查询性能逐渐成为主流。Doris 和 ClickHouse 是近年来最受欢迎的两款开源 OLAP 引擎&#xff0c;本文将系统介绍 Doris 的安装部署、应用场景及优化实践&#xff0c;并与 ClickHouse 做一…

OracleLinuxR5U5系统重启后启动数据库oracle23ai

1、切换到oracle用户 [rootOracleLinux-R9-U5 ~]# su oracle2、查看oracle是否配置了ORACLE_SID [oracleOracleLinux-R9-U5 root]$ cd ~ [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile3、输出内容如下&#xff1a; [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile # .ba…

【正点原子】STM32MP257 同构多核架构下的 ADC 电压采集与处理应用开发实战

在嵌入式系统中&#xff0c;ADC模拟电压的读取是常见的需求。如何高效、并发、且可控地完成数据采集与处理&#xff1f;本篇文章通过双线程分别绑定在 Linux 系统的不同 CPU 核心上&#xff0c;采集 /sys/bus/iio 接口的 ADC 原始值与缩放系数 scale&#xff0c;并在另一个核上…

电商用户购物行为分析:基于K-Means聚类与分类验证的完整流程

随着电商行业的快速发展,用户行为分析成为企业优化营销策略、提升用户体验的重要手段。通过分析用户的购物行为数据,企业可以挖掘出用户群体的消费特征和行为模式,从而制定更加精准的营销策略。本文将详细介绍一个基于Python实现的电商用户购物行为分析系统,涵盖数据预处理…

AMGCL库的Backends及使用示例

AMGCL库的Backends及使用示例 AMGCL是一个用于解决大型稀疏线性方程组的C库&#xff0c;它提供了多种后端(backends)实现&#xff0c;允许用户根据不同的硬件和性能需求选择合适的计算后端。 AMGCL支持的主要Backends 内置Backends: builtin - 默认的纯C实现block - 支持块状…

Express中间件(Middleware)详解:从零开始掌握(3)

实用中间件模式25例 1. 基础增强模式 请求属性扩展 function extendRequest() {return (req, res, next) > {req.getClientLanguage () > {return req.headers[accept-language]?.split(,)[0] || en;};next();}; } 响应时间头 function responseTime() {return (r…