100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C#使用Windows API实现桌面上的遮罩层(鼠标穿透)

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

时间:2020-10-30 09:41:12

相关推荐

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();

}

[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实现桌面上的遮罩层(鼠标穿透),希望对你有所帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。