c#鼠标绘制

       有用的没用的,用的上的用不上的,能写的不能写的,反正想起来就写了,比如这篇,好像一般也没什么用,emmm,或许,做录制软件的时候可以用一下。

        顾名思义,本篇主要就是来实现将鼠标的指针样式给绘制成图片,显示或者保存下来。以下会通过两种方式实现,一种是C#自带的Cursor,另一种就是用Windows Api;下面分别写下两种方式的实现代码以及优势和缺陷  

      第一种使用C#自带的Cursor,这种方式使用起来比较简单,但是没办法正确获取到程序页面以外的指针形状
 private void button1_Click(object sender, EventArgs e)
 {
     Graphics graphics = pictureBox1.CreateGraphics();
     graphics.Clear(pictureBox1.BackColor);
     int x=Cursor.Position.X;
     int y=Cursor.Position.Y;
     Cursor.Draw(graphics, new Rectangle(1,1,50,50));
     //以拉伸格式绘制
     // Cursor.DrawStretched(pictureBox1.CreateGraphics(), new Rectangle(1, 1, 50, 50));
     label1.Text = $"坐标:{x},{y}";
 }

 

       第二种使用Windows Api,这种方式就比较全面,可以弥补上面那种方式的缺点。
/// <summary>
  /// 获取鼠标信息
  /// </summary>
  /// <param name="cInfo"></param>
  /// <returns></returns>
  [DllImport("user32.dll", EntryPoint = "GetCursorInfo")]
  private static extern bool GetCursorInfo(ref CURSORINFO cInfo);

  /// <summary>
  /// 将指定的图标从另一个模块复制到当前模块。
  /// </summary>
  /// <param name="hIcon"></param>
  /// <returns></returns>
  [DllImport("user32.dll", EntryPoint = "CopyIcon")]
  private static extern IntPtr CopyIcon(IntPtr hIcon);

  /// <summary>
  /// 获取有关指定图标或光标的信息
  /// </summary>
  /// <param name="hIcon"></param>
  /// <param name="iInfo"></param>
  /// <returns></returns>
  [DllImport("user32.dll", EntryPoint = "GetIconInfo")]
  private static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO iInfo);

 

private (int x, int y, Bitmap bmp) CaptureCursor()
  {
      CURSORINFO cURSORINFO = new CURSORINFO();

      cURSORINFO.cbSize = Marshal.SizeOf(cURSORINFO);
      if (GetCursorInfo(ref cURSORINFO))
      {
          if (cURSORINFO.flags == 0x00000001)
          {
              IntPtr icon = CopyIcon(cURSORINFO.hCursor);

              ICONINFO iCONINFO;
              if (GetIconInfo(icon, out iCONINFO))
              {
                  int x = cURSORINFO.ptScreenPos.X - iCONINFO.xHotspot;
                  int y = cURSORINFO.ptScreenPos.Y - iCONINFO.yHotspot;
                  Bitmap bmp = Icon.FromHandle(icon).ToBitmap();
                  return (x, y, bmp);
              }
          }
      }
      return (0,0,null);
  }

private void button3_Click(object sender, EventArgs e) { var cursor = CaptureCursor(); pictureBox1.Image = cursor.bmp; label1.Text = $"坐标:{cursor.x},{cursor.y}"; }

     3.下面看下实现效果,当鼠标在界面外时,我们主要通过Tab和Enter来触发按钮

0fc39c2b76c54b2ebeadd87ea2193c66.gif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359844.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux上搭建mqtt开发环境及服务器部署(MosquittoEMQX)

&#x1f449;&#x1f449;&#x1f449;关于Mosquitto代码编写及EMQX的使用&#xff0c;由此入 一、安装编译Mosquitto 使用Mosquitto编写程序连接MQTT服务器&#xff0c;并收发数据1-安装所需依赖 用于在Linux系统上进行SSL/TLS加密通信的开发。它提供了一组用于加密和解密…

dvwa靶场xss储存型

xss储存型 xxs储存型lowmessage框插入恶意代码name栏插入恶意代码 medium绕过方法 high xxs储存型 攻击者事先将恶意代码上传或储存到漏洞服务器中&#xff0c;只要受害者浏览包含此恶意代码的页面就会执行恶意代码。产生层面:后端漏洞特征:持久性的、前端执行、储存在后端数据…

vue前端页面时间显示问题解决方法

解决方法&#xff0c; <template slot-scope"scope"><span>{{ parseTime(scope.row.boxClosingOnlineTime, {y}-{m}-{d} {h}:{i}:{s}) }}</span> </template> 刷新页面&#xff1a; 此外&#xff0c;使用JsonFormat(pattern "yyyy-M…

天气预警API:提升公共安全与紧急响应效率的关键技术

摘要 随着全球气候变化的加剧&#xff0c;极端天气事件的频发对公共安全构成了巨大挑战。为了有效应对这些挑战&#xff0c;天气预警API作为一种关键技术&#xff0c;正在逐渐成为提升公共安全与紧急响应效率的重要工具。本文将探讨天气预警API的工作原理、应用场景以及如何通…

全国生态服务功能区数据,shp格式,2008年,来源于国家生态环境部发布的《全国生态功能区》2008年版

数据名称: 全国生态服务功能区数据 数据格式: Shp 数据时间: 2008年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;国家生态环境部发布的《全国生态功能区》2008年版 数据字段&#xff1a; 序号字段名称字段说明1bh编号2mc名称3stgn_1生态功能一级区4s…

Oracle 锁的概念以及分类

1.什么是锁 数据库是一个庞大的多用户数据管理系统&#xff0c; 同一时刻可能有多个用户同时操作。事务的分离性要求当前事务不能影响其他的事务&#xff0c;所以多个会话操作同一个资源时&#xff0c;数据库会利用锁确保他们像队列一样一次执行。利用来锁消除多个用户操作同一…

删除有序数组中的重复项[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个非严格递增排列的数组nums&#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。 考虑nums的唯一元素…

C语言菜鸟入门·函数

目录 1. 函数的定义 2. 函数声明 3. 函数调用 4. 函数参数 4.1 传值调用 4.2 引用调用 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同…

Qt+css绘制标题

之前学过html和小程序&#xff0c;帮老师做项目的时候也用过vue&#xff0c;在想qt绘制界面是不是也可以使用css,然后查了一些资料&#xff0c;绘制了一个标题&#xff0c;准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数&#xff0c;一个用于绘…

Shell中的awk

一、awk 1.1.awk工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 awk倾向于将一行分成多个"字段"然后再进行处理。 awk信息的读入也是逐行读取…

服务器端请求伪造漏洞

服务器端请求伪造&#xff08;Server-Side Request Forger &#xff0c;SSRF&#xff09;漏洞是近年来比较常 见的一种漏洞。SSRF漏洞本身并不危险&#xff0c;与SQL注入或XSS相比较危害不大&#xff0c;但 近年来有人通过将SSRF结合未授权访问漏洞进行渗透&#xff0c;危害就非…

安装并开始设置 Windows 终端(命令提示符或Windows PowerShell或Azure Cloud Shell)

安装 安装 若要试用最新的预览功能&#xff0c;可能还需要安装 Windows 终端预览。 ‼️备注 如果你无法访问 Microsoft Store&#xff0c;GitHub 发布页上发布有内部版本。 如果从 GitHub 安装&#xff0c;Windows 终端将不会自动更新为新版本。 有关使用包管理器&#xff…

C# .Net Framework webapi 全局日志

1.创建一个类名字叫做CustomActionFilter.cs /// <summary>/// /// </summary>public class CustomActionFilter : System.Web.Http.Filters.ActionFilterAttribute{/// <summary>/// /// </summary>/// <param name"actionExecutedContext&q…

CCF-CSP 202312-3 树上搜索(Java、C++、Python)

文章目录 树上搜索题目背景问题描述输入格式输出格式样例1输入样例1输出样例解释子任务 满分代码JavaCPython 树上搜索 题目背景 西西艾弗岛大数据中心为了收集用于模型训练的数据&#xff0c;推出了一项自愿数据贡献的系统。岛上的居民可以登录该系统&#xff0c;回答系统提…

在 Amazon EKS 上部署生成式 AI 模型

导言 生成式 AI 正在改变企业的运作方式&#xff0c;并加快创新的步伐。总体而言&#xff0c;人工智能正在改变企业利用技术的方式。生成式 AI 技术包括微调和部署大型语言模型&#xff08;LLM&#xff09;&#xff0c;并允许开发人员访问这些模型以执行提示和对话。负责在 Kub…

搭建WebGL开发环境

前言 本篇文章介绍如何搭建WebGL开发环境 WebGL WebGL的技术规范继承自免费和开源的OpenGL ES标准&#xff0c;从某种意义上说&#xff0c;WebGL就是Web版的OpenGL ES&#xff0c;而OpenGL ES是从OpenGL中派生出来的。他们的应用环境有区别&#xff0c;一般来说&#xff1a;…

聊聊百度造车

10月27日&#xff0c;极越-01上市&#xff0c;一个月后大幅降价&#xff0c;时至今日距离发布已经过去了两个月&#xff0c;官方迟迟不肯公布销量&#xff0c;实际情况大家也都心知肚明。 如今小米汽车技术发布会风头无两&#xff0c;而同一年宣布造车的极越却无人问津&#x…

算法随想录第四十八天打卡| 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

详细布置 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 视频讲解&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 代码随想录 class Solution(…

【智能家居入门3】(MQTT服务器、MQTT协议、微信小程序、STM32)

前面已经写了三篇博客关于智能家居的&#xff0c;服务器全都是使用ONENET中国移动&#xff0c;他最大的优点就是作为数据收发的中转站是免费的。本篇使用专门适配MQTT协议的MQTT服务器&#xff0c;有公用的&#xff0c;也可以自己搭建&#xff08;应该要钱&#xff09;&#xf…

华为配置ARP安全综合功能实验

配置ARP安全综合功能示例 组网图形 图1 配置ARP安全功能组网图 ARP安全简介配置注意事项组网需求配置思路操作步骤配置文件 ARP安全简介 ARP&#xff08;Address Resolution Protocol&#xff09;安全是针对ARP攻击的一种安全特性&#xff0c;它通过一系列对ARP表项学习和A…