• 实现鼠标穿透窗体


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace MouseThroughForm
    {
    public partial class Frm_Main : Form
    {
    public Frm_Main()
    {
    InitializeComponent();
    }

    private const uint WS_EX_LAYERED = 0x80000;
    private const int WS_EX_TRANSPARENT = 0x20;
    private const int GWL_EXSTYLE = (-20);
    private string Var_genre = "";//记录当前操作的类型

    #region 在窗口结构中为指定的窗口设置信息
    /// <summary>
    /// 在窗口结构中为指定的窗口设置信息
    /// </summary>
    /// <param name="hwnd">欲为其取得信息的窗口的句柄</param>
    /// <param name="nIndex">欲取回的信息</param>
    /// <param name="dwNewLong">由nIndex指定的窗口信息的新值</param>
    /// <returns></returns>
    [DllImport("user32", EntryPoint = "SetWindowLong")]
    private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
    #endregion

    #region 从指定窗口的结构中取得信息
    /// <summary>
    /// 从指定窗口的结构中取得信息
    /// </summary>
    /// <param name="hwnd">欲为其获取信息的窗口的句柄</param>
    /// <param name="nIndex">欲取回的信息</param>
    /// <returns></returns>
    [DllImport("user32", EntryPoint = "GetWindowLong")]
    private static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
    #endregion

    #region 使窗口有鼠标穿透功能
    /// <summary>
    /// 使窗口有鼠标穿透功能
    /// </summary>
    private void CanPenetrate()
    {
    uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
    uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
    }
    #endregion

    private void Frm_Main_Load(object sender, EventArgs e)
    {
    this.ShowInTaskbar = false;//窗体不出现在Windows任务栏中
    CanPenetrate();
    this.TopMost = true;//使窗体始终在其它窗体之上
    }

    #region 设置颜色和透明度的状态
    /// <summary>
    /// 设置颜色和透明度的状态
    /// </summary>
    private void SetEstate(Form Frm, object sender)
    {
    Var_genre = ((ToolStripMenuItem)sender).Name;
    string Tem_Str = Var_genre;
    if (Var_genre.IndexOf('_') >= 0)
    {
    Var_genre = Tem_Str.Substring(0, Tem_Str.IndexOf('_'));
    }

    switch (Var_genre)
    {
    case "ToolColor":
    {
    Color Tem_Color=Color.Gainsboro;
    switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
    {
    case 1: Tem_Color = Color.Gainsboro; break;
    case 2: Tem_Color = Color.DarkOrchid; break;
    case 3: Tem_Color = Color.RoyalBlue; break;
    case 4: Tem_Color = Color.Gold; break;
    case 5: Tem_Color = Color.LightGreen; break;
    }
    Frm.BackColor = Tem_Color;
    break;
    }
    case "ToolClarity":
    {
    double Tem_Double = 0.0;
    switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
    {
    case 1: Tem_Double = 0.1; break;
    case 2: Tem_Double = 0.2; break;
    case 3: Tem_Double = 0.3; break;
    case 4: Tem_Double = 0.4; break;
    case 5: Tem_Double = 0.5; break;
    case 6: Tem_Double = 0.6; break;
    case 7: Tem_Double = 0.7; break;
    case 8: Tem_Double = 0.8; break;
    case 9: Tem_Double = 0.9; break;

    }
    Frm.Opacity = Tem_Double;
    break;
    }
    case "ToolAcquiescence":
    {
    Frm.BackColor = Color.Gainsboro;
    Frm.Opacity = 0.6;
    break;
    }
    case "ToolClose":
    {
    Close();
    break;
    }

    }
    }
    #endregion

    private void ToolColor_Glass_Click(object sender, EventArgs e)
    {
    SetEstate(this, sender);
    }
    }
    }

  • 相关阅读:
    QEMU内存分析(四):ept页表构建
    virtio简介(二) —— virtioballoon guest侧驱动
    将数据库所有的表的字符集改为utf8
    windows 10 mysql 安装
    Windows10 安装MySQL详细教程2020版 亲测亲写
    发现了一个可以免费下载jar包的网站,所有jar包都有
    我的新书《Flink大数据分析实战》出版啦
    2022最新 Navicat Premium 16中文软件激活安装永久使用正版(支持MAC+win)
    Adobe全家桶PS、PR、AU等2022正版永久有效,无需破解直接安装就能用
    虚拟机问题:VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行
  • 原文地址:https://www.cnblogs.com/ysz12300/p/5512861.html
Copyright © 2020-2023  润新知