C#使用Windows API实现桌面上的遮罩层(鼠标穿透)

C#实现实现桌面上的遮罩层(鼠标穿透)主要通过一下几个API函数来实现:GetWindowLong,SetWindowLong,SetLayeredWindowAttributes。其中有一个Windows 消息 WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能。 下面来看看完整的实现代码:
 
 
using System;  
using System.Drawing;  
using System.Windows.Forms;  
using System.Runtime.InteropServices;  
namespace WindowsApplication40  
{  
  public partia lclass Form1:Form  
  {  
    public Form1()  
    {  
      InitializeComponent();  
    }    
要想使窗口具有透明效果,需要设置窗口WS_EX_LAYERED
    [DllImport("user32.dll",EntryPoint="GetWindowLong")]  
    public static extern long GetWindowLong(IntPtr hwnd,int nIndex);  
    [DllImport("user32.dll",EntryPoint="SetWindowLong")]  
    public static extern long SetWindowLong(IntPtr hwnd,int nIndex,long dwNewLong);  
    [DllImport("user32",EntryPoint="SetLayeredWindowAttributes")]  
    public static extern int SetLayeredWindowAttributes(IntPtr Handle,int crKey,byte bAlpha,int dwFlags);  
    const int GWL_EXSTYLE=-20;  
    const int WS_EX_TRANSPARENT=0x20;  
    const int WS_EX_LAYERED=0x80000;  
    const int LWA_ALPHA=2;  
 
    private void Form1_Load(objec tsender,EventArgs e)  
    {  
      this.BackColor=Color.Silver;  
      this.TopMost=true;  
      this.FormBorderStyle=FormBorderStyle.None;  
      this.WindowState=FormWindowState.Maximized;  
      SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_TRANSPARENT|WS_EX_LAYERED);  
      SetLayeredWindowAttributes(Handle,0,128,LWA_ALPHA);  
    }  
  }  
} 
以上就是介绍C#使用Windows API实现桌面上的遮罩层(鼠标穿透),希望对你有所帮助。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值