首页 > 编程语言 >C# Winform 鼠标穿透

C# Winform 鼠标穿透

时间:2023-08-15 14:28:11浏览次数:38  
标签:const 鼠标 C# private int uint WS Winform

以前在玩射击游戏的时候,狙击枪的设定一般是开镜才有准星,所以想是不是可以自己造一个默认准星出来,思路是现在窗口上画一个准星,然后把窗体其他区域都透明,然后设置鼠标穿透;

结果是:

UpdateLayeredWindow 的不规则窗口中,添加鼠标穿透功能导致不规则窗口失效。
GraphicsPathForm 的不规则窗口中,可以愉快地使用鼠标穿透功能。
注意:
全屏的游戏,窗口是不能最前的,可以先把游戏设置成窗口模式(尴尬),一般游戏切换全屏的按键是“alt+enter”。

鼠标穿透

private const uint WS_EX_LAYERED = 0x80000;
private const int WS_EX_TRANSPARENT = 0x20;
private const int GWL_STYLE = (-16);
private const int GWL_EXSTYLE = (-20);
private const int LWA_ALPHA = 0;

[DllImport("user32", EntryPoint = "SetWindowLong")]
private static extern uint SetWindowLong(
IntPtr hwnd,
int nIndex,
uint dwNewLong
);

[DllImport("user32", EntryPoint = "GetWindowLong")]
private static extern uint GetWindowLong(
IntPtr hwnd,
int nIndex
);

[DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
private static extern int SetLayeredWindowAttributes(
IntPtr hwnd,
int crKey,
int bAlpha,
int dwFlags
);

/// <summary> 
/// 设置窗体具有鼠标穿透效果 
/// </summary> 
public void SetPenetrate()
{
    this.TopMost = true;
    SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
    SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA);
}

镂空窗体

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
        SetLayeredWindowAttributes(Handle, 0x00FF00, 255, LWA_COLORKEY);//替换某种颜色为透明(0x00FF00:绿色)
    }
    private const uint WS_EX_LAYERED = 0x80000;//异形窗体特效的实现
    private const int GWL_EXSTYLE = -20;//设定一个新的扩展风格
    private const int LWA_COLORKEY = 1;//透明方式
    [DllImport("user32", EntryPoint = "SetWindowLong")]
    //改变指定窗口的属性
    private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
    [DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
    //设置分层窗口透明度
    private static extern int SetLayeredWindowAttributes(IntPtr hwnd, int crKey, int bAlpha, int dwFlags);

    private void Form1_Load(object sender, EventArgs e)
    {
        //TransparencyKey = BackColor;
    }
}

 

标签:const,鼠标,C#,private,int,uint,WS,Winform
From: https://www.cnblogs.com/guangzhiruijie/p/17631157.html

相关文章

  • 我的BIOS之行1-Introduction
    前言想对自己在本月所学的东西做一个总结,因而产生了写本系列博客的冲动,由于工作较为繁忙,不能及时更新,敬请原谅CPUIntroduction&Multi-Processor本节博客将简单介绍CPU的情况。1、CPU简介CPU–TheCentralProcessorUnitisthehardwarewithinacomputersystemwhic......
  • 2-07-Feign-基于Feign的远程调用-not practice
    使用Feign共四步引入依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>启动类添加注解开启功能针对每个服务创建对应的客户端packagecn.itcast.order.client;impo......
  • CC6
    参考链接https://www.bilibili.com/video/BV1yP4y1p7N7https://y0n3er.github.io/undefined/29590.htmlhttps://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections6.java环境搭建jdk_8u71:https://blog.lupf.cn/articles/2022/0......
  • 我的BIOS之行2-Keyboard Controller 简介
    KeyboardController简介主板的键盘有一块专用的接口芯片,一般是采用一块单片微处理器8042(现在大多已集成在南桥或SIO里)。它控制整个键盘的工作,包括加电自检、键盘扫描码的缓冲以及与主板的通讯。INT09H是H/W中断,对应IRQ1,INT16H是一个S/W中断。当键盘的一个键被按下时,键盘接......
  • CSS基础-行和段落常用属性
    介绍三个和行相关的属性。line-height定义行高,即行的高度,数值单位用px、字号倍数、百分比表示。<!--方式一属性单位为px--><style> p{ line-height:30px }</style><!--方式二不带单位,表示字号的倍数--><style> p{ line-height:1.5 }</style><!--方式三......
  • 编译greenDao的时候出现KaptExecution:java.lang.reflect.InvocationTargetException
    一、概述在编译greendao的时候出现了以下异常。Executionfailedfortask':common_base:kaptDebugKotlin'.>Afailureoccurredwhileexecutingorg.jetbrains.kotlin.gradle.internal.KaptExecution>java.lang.reflect.InvocationTargetException(noerrormes......
  • C# Winform 使用 BarTender打印条码
    -1.使用软件BarTender设计打印模板贴一个入门级使用教程:https://blog.csdn.net/ononeway/article/details/119912602我在项目中使用的是txt文本格式保存的字段以及数据,第一行是绑定数据的字段,第二行是字段对应的数据。点击查看代码"ITEM_CODE","ITEM_DESC","UOM_NAME","V......
  • 小米发布全新CyberDog 2,体型接近真实小型犬,超80%开源率,100+接口开放
    小米发布全新CyberDog2,体型接近真实小型犬,超80%开源率,100+接口开放2023-08-1508:01:28 来源: 金融界分享到:8月14日,小米发布全新仿生四足机器人CyberDog2。该款产品在继承前代优势的基础上,进行了全面的技术升级:它配备了新一代小米自研高性能电机,提供了更为强大的动态响应......
  • c# 如何将程序加密隐藏?
    下面将介绍如何通过LiteDB将自己的程序进行加密,首先介绍一下LiteDB。LiteDBLiteDB是一个轻量级的嵌入式数据库,它是用C#编写的,适用于.NET平台。它的设计目标是提供一个简单易用的数据库解决方案,可以在各种应用程序中使用。LiteDB使用单个文件作为数据库存储,这个文件可以在磁盘上......
  • decimal float double小数位比较
    decimalfloatdouble小数位比较语法---2023-7-27decimal最多可以保留28位小数float最多可以保留6位小数double最多可以保留14位小数///<summary>///测试语法///</summary>publicstaticvoidTestProgrammer(){d......