C#实现水印功能分享源码

一、废话不多说,直接上源码,主窗口调用水印窗口方法

private void CheckScreen()
        {
            if (_screenNum == Screen.AllScreens.Length)
                return;
            if (Screen.AllScreens.Length >= 1)
            {
                // 屏幕数目发生变化
                if (_screenNum != Screen.AllScreens.Length)
                {
                    // 移除之前的水印窗口
                    for (int iIndex = _watermarkWinList.Count - 1; iIndex >= 0; iIndex--)
                    {
                        _watermarkWinList[iIndex].Dispose();
                        _watermarkWinList.RemoveAt(iIndex);
                    }
                    _screenNum = Screen.AllScreens.Length;
                }
                // 设置显示内容
                SetShowContent();
            }
        }
        private void SetShowContent()
        {
            // 遍历所有屏幕
            foreach (Screen sc in Screen.AllScreens)
            {
                // 创建水印窗口
                WaterMarkWin watermarkWin = new WaterMarkWin(sc, currentUser);
                // 显示水印窗口
                watermarkWin.Show();
                _watermarkWinList.Add(watermarkWin);
            }
        }

二、主窗口加载时开始调用,主程序窗体最小化及设置窗口为最小化,用户名只是例子显示本机Windows的用户名,根据需要自动调整

public Form1()
{
    InitializeComponent();

    // 不在任务栏中显示
    this.ShowInTaskbar = false;
    // 设置窗口为最小化
    this.WindowState = FormWindowState.Minimized;
    // 获取当前登录用户名
    currentUser = System.Environment.GetEnvironmentVariable("USERNAME");

    //开启画水印
    CheckScreen();
}

三、水印窗口就是一个原始窗口加一个pictureBox就行,代码直接贴下面



    原创发布区
    精品软件区
    逆向资源区
    水漫金山区
    病毒救援区
    福利经验区

    脱壳破解区
    移动安全区
    病毒分析区
    编程语言区
    动画发布区
    安全工具区

    站点公告
    站点导航
    站点总版规
    申请专区
    招聘求职
    违规怎么办

    站点帮助
    站务处理

		
搜索
	
热搜:
ctf
新手
脱壳
教程
Crackme
吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
»
网站
›
【 软件安全 】
›
『编程语言区』
›
C#实现水印功能分享
1
2
3
/ 3 页
下一页
返回列表
发新帖
查看: 1165|回复: 23
	
上一主题 下一主题
收起左侧
[C&C++ 原创] C#实现水印功能分享   [复制链接]
	
zhaozengliang
	
电梯直达
跳转到指定楼层
楼主
发表于 2024-3-14 09:29 回帖奖励
本帖最后由 zhaozengliang 于 2024-3-14 14:39 编辑


一、废话不多说,直接上源码,主窗口调用水印窗口方法
        private void CheckScreen()
        {
            if (_screenNum == Screen.AllScreens.Length)
                return;
            if (Screen.AllScreens.Length >= 1)
            {
                // 屏幕数目发生变化
                if (_screenNum != Screen.AllScreens.Length)
                {
                    // 移除之前的水印窗口
                    for (int iIndex = _watermarkWinList.Count - 1; iIndex >= 0; iIndex--)
                    {
                        _watermarkWinList[iIndex].Dispose();
                        _watermarkWinList.RemoveAt(iIndex);
                    }
                    _screenNum = Screen.AllScreens.Length;
                }
                // 设置显示内容
                SetShowContent();
            }
        }
        private void SetShowContent()
        {
            // 遍历所有屏幕
            foreach (Screen sc in Screen.AllScreens)
            {
                // 创建水印窗口
                WaterMarkWin watermarkWin = new WaterMarkWin(sc, currentUser);
                // 显示水印窗口
                watermarkWin.Show();
                _watermarkWinList.Add(watermarkWin);
            }
        }

二、主窗口加载时开始调用,主程序窗体最小化及设置窗口为最小化,用户名只是例子显示本机Windows的用户名,根据需要自动调整
public Form1()
{
    InitializeComponent();

    // 不在任务栏中显示
    this.ShowInTaskbar = false;
    // 设置窗口为最小化
    this.WindowState = FormWindowState.Minimized;
    // 获取当前登录用户名
    currentUser = System.Environment.GetEnvironmentVariable("USERNAME");

    //开启画水印
    CheckScreen();
}


三、水印窗口就是一个原始窗口加一个pictureBox就行,代码直接贴下面,开始没贴,忘了



using System;
using System.Drawing;
using System.Windows.Forms;

namespace TestUSB2
{
    public partial class WaterMarkWin : Form
    {
                public Screen _sc;
                public string _userName;

        public WaterMarkWin()
        {
            InitializeComponent();
        }

                public WaterMarkWin(Screen sc, string UserName)
                {
                        _sc = sc;
                        _userName = UserName;
                        InitializeComponent();

                        // 最顶层现实窗口
                        this.TopMost = true;
                        // 窗口不再任务栏中显示
                        this.ShowInTaskbar = false;
                        // 设置透明区域颜色
                        this.TransparencyKey = Color.Lime;
                        // 设置窗口的边框样式
                        this.FormBorderStyle = FormBorderStyle.None;
                        // 设置窗口最大化
                        this.WindowState = FormWindowState.Maximized;
                        // 设置窗口背景色
                        this.BackColor = Color.Lime;
                        // 设置水印
                        CreateWatermark();
                }


                private void CreateWatermark()
                {
                        // 清除所有水印
                        pictureBox1.Controls.Clear();
                        // 水印内容
                        string watermarkContent = Environment.MachineName + " " + System.Environment.UserDomainName;
                        // 创建水印图片
                        Image img = CreateImage(watermarkContent, 20);
                        // 工作区域宽度
                        int maxWidth = _sc.WorkingArea.Width;
                        int maxHeight = _sc.WorkingArea.Height;
                        // 可以绘制的列数
                        int cols = maxWidth / img.Width;
                        // 可以位置的行数
                        int rows = maxHeight / img.Height;

                        for (int col = 0; col <= cols; col++)
                        {
                                for (int row = 0; row <= rows; row++)
                                {
                                        // 创建图片对象
                                        PictureBox pic = new PictureBox();
                                        // 要绘制的图片
                                        pic.Image = img;
                                        // 图片宽度
                                        pic.Width = img.Width;
                                        // 图片高度
                                        pic.Height = img.Height;
                                        // 图片显示的位置
                                        pic.Left = col * pic.Width;
                                        pic.Top = row * pic.Height;

                                        pictureBox1.Controls.Add(pic);
                                }
                        }
                        // 主动回收内存
                        GC.Collect();
                }
                /// <summary>
                /// 生成文字图片
                /// </summary>
                /// <param name="text"></param>
                /// <param name="isBold"></param>
                /// <param name="fontSize"></param>
                public Image CreateImage(string text, int fontSize)
                {
            // 宽度
            int width = 40;
            // 高度
            int height = 20;
                        Font font = new Font("微软雅黑", fontSize, FontStyle.Regular);
                        //Font font = new Font("微软雅黑", fontSize, (FontStyle)0x6);

                        // 定义单色画笔
                        SolidBrush brush = new SolidBrush(Color.Gray);
            //SolidBrush brush = new SolidBrush(Color.FromArgb(255,));
            // 设置显示字符串格式
            StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                        // 字符串水平对齐方式
                        format.Alignment = StringAlignment.Center;
                        // 字符串垂直对齐方式
                        format.LineAlignment = StringAlignment.Center;
                        // 创建Graphics对象
                        Graphics grph = Graphics.FromImage(new Bitmap(1, 1));
                        // 解决绘制闪烁
                        grph.Clear(this.BackColor);
                        // 测量出字体的宽高
                        SizeF sf = grph.MeasureString(text, font);
                        width = Convert.ToInt32(sf.Width);
                        height = Convert.ToInt32(sf.Height);
                        int bitmapWidth = height > width ? height : width;
                        bitmapWidth = (int)(bitmapWidth * 1.2);
                        // 创建位图对象(此处按照最大的宽或高进行设置,是为防止在进行字符串旋转后,字符串显示区域不够)
                        Bitmap image = new Bitmap(bitmapWidth, bitmapWidth);
                        // 根据实际的位图对象创建
                        grph = Graphics.FromImage(image);
                        // 将绘制原点偏移到(0,width),不进行偏移,则以(0,0)点作为绘制原点
                        grph.TranslateTransform(0, width);
                        // 旋转绘制的图形以(0,width)为圆心
                        grph.RotateTransform(-45);
                        // 指定文本的呈现模式
                        /*
                        * ClearType: 由美国微软公司在其Windows操作系统中提供的荧幕字体平滑工具,让Windows字体更加漂亮。ClearType主要是针对LCD 液晶 显示器设计,
                        * 可提高文字的清晰度。基本原理是,将显示器的R, G, B各个次像素也发光,让其色调进行微妙调整,可以达到实际分辨率以上(横方向分辨率的三倍)
                        * 的纤细文字的显示效果
                        */
                        grph.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
                        // 用于渲染抗锯齿和 ClearType 文本的伽马校正值(32是随便写的)
                        // grph.TextContrast = 32;
                        // 指定直线、 曲线和已填充区域的边缘是否使用平滑处理(也称为抗锯齿).当是路径渐变画笔不遵守平滑模式
                        // grph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        // InterpolationMode的指决定了如何计算两点之间的插补值
                        // grph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        // 指定如何将合成图像绘制到此 Graphics。复合模式确定从源映像的像素是覆盖(SourceCopy)还是组合(SourceOver, 需要使用半透明、混合叠加效果时使用)使用背景像素。默认值为 SourceOver。
                        // grph.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                        // 设置绘制到此 Graphics 的合成图像的呈现质量
                        // grph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

                        // 实际要绘制的区域的大小
                        RectangleF rect = new RectangleF(0, 0, width, height);
                        // 绘制字符串
                        grph.DrawString(text, font, brush, rect, format);
                        // 释放对象
                        grph.Dispose();
                        // 返回绘制好的image对象
                        return image;
                }


    }
}

结束

颜色,字体,大小,倾斜,等都可以改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DNCS高级工程师

你的创作是我打赏的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值