当前位置: 首页 > news >正文

Unity调用API函数对系统桌面和窗口截图

Unity3D调用WINAPI函数对系统窗口截图

  • 引入WINAPI函数
  • 调用WINAPI函数进行截图
  • 使用例子

引入WINAPI函数

using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Drawing;[DllImport("user32.dll")]private static extern IntPtr GetDC(IntPtr hwnd);[DllImport("user32.dll")]private static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rectangle rect);[DllImport("gdi32.dll")]private static extern IntPtr CreateCompatibleDC(IntPtr hdc);[DllImport("gdi32.dll")]private static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);[DllImport("gdi32.dll")]private static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);[DllImport("gdi32.dll")]private static extern bool BitBlt(IntPtr hDestDC, int xDest, int yDest, int wDest, int hDest, IntPtr hSrcDC, int xSrc, int ySrc, int rop);const int SRCCOPY = 0x00CC0020;[DllImport("gdi32.dll")]public static extern int GetBitmapBits(IntPtr hbmp, int cbBuffer, byte[] lpvBits);[DllImport("gdi32.dll")]private static extern int DeleteDC(IntPtr hdc);[DllImport("user32.dll")]public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);[DllImport("gdi32.dll")]public static extern bool DeleteObject(IntPtr hObject);[DllImport("user32.dll")]private static extern IntPtr GetDesktopWindow();[DllImport("user32.dll")]private static extern IntPtr GetActiveWindow();

调用WINAPI函数进行截图

  public static Texture2D CaptureWindow(IntPtr hWnd){var hscrdc = GetDC(hWnd);var windowRect = new Rectangle();GetWindowRect(hWnd, ref windowRect);int width = Math.Abs(windowRect.Width - windowRect.X);int height = Math.Abs(windowRect.Height - windowRect.Y); Texture2D texture = new Texture2D(width, height, TextureFormat.RGBA32, false);var hbitmap = CreateCompatibleBitmap(hscrdc, width, height);var hmemdc = CreateCompatibleDC(hscrdc);SelectObject(hmemdc, hbitmap);BitBlt(hmemdc, 0, 0, width, height, hscrdc, 0, 0, SRCCOPY);// 创建一个字节数组来存储像素数据byte[] pixels = new byte[width * height * 4];// 调用 GetBitmapBits 函数,将像素数据存储在字节数组中int result = GetBitmapBits(hbitmap, pixels.Length, pixels);// 检查结果并处理像素数据if (result != 0){// 处理像素数据texture.LoadRawTextureData(pixels);texture.Apply();}else{Debug.LogError("Failed to retrieve bitmap bits.");}DeleteObject(hbitmap);ReleaseDC(hWnd, hscrdc);DeleteDC(hmemdc);return texture;}

使用例子

调用CaptureWindow函数对当前窗口进行截图

   IntPtr hwnd = GetActiveWindow();Texture2D texture = CaptureWindow(hwnd);

调用CaptureWindow函数对桌面进行截图

   IntPtr hwnd = GetDesktopWindow();Texture2D texture = CaptureWindow(hwnd);

相关文章:

Unity调用API函数对系统桌面和窗口截图

Unity3D调用WINAPI函数对系统窗口截图 引入WINAPI函数调用WINAPI函数进行截图使用例子 引入WINAPI函数 using System; using System.Collections; using System.Runtime.InteropServices; using System.Drawing;[DllImport("user32.dll")]private static extern Int…...

【问题思考总结】CPU怎么访问磁盘?CPU只有32位,最多只能访问4GB的空间吗?

问题 在学习操作系统的时候发现了这样一个问题,32位的CPU寻址空间只有4GB,难道只有4GB的空间可以使用吗?以此为始,我开始了一些思考。 思考 Q1:首先,我似乎混淆了一个概念,内存和外存&#x…...

UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个三维模型3、在UG NX/CAM中创建多个加工程序4、采用UG NX二次开发(NXOpen)实现按照刀具分组程序组4.2 创建UI Styler4.1 实现逻辑4.2 生成的代码如下:4.3 测试效果4.…...

Unity如何实现TreeView

前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…...

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图,这些数据和功能可以直…...

Linux下C语言操作网卡的几个代码实例?特别实用

前面写了一篇关于网络相关的文章:如何获取当前可用网口。 《简简单单教你如何用C语言列举当前所有网口!》 那么如何使用C语言直接操作网口? 比如读写IP地址、读写MAC地址等。 一、原理 主要通过系统用socket()、ioctl()、实现 int sock…...

noip2011选择旅馆

1.审题:第一个人与第二个人入住的旅馆要求是同色的; 两个人去消费的旅馆并没有要求与入住的旅馆是同色的(这点要小心) 2.要求记录以下数据: 1)a[color]表示当前同为颜色color的旅馆数 2)b[co…...

vue造轮子完整指南--npm组件包开发步骤

一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义&#xff0c;然后不需要Vuex和Router&#xff0c;其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…...

28 drf-Vue个人向总结-1

文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…...

线性代数(七) 矩阵分析

前言 从性线变换我们得出&#xff0c;矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 矩阵的序列 通过这个定义我们就定义了矩阵序列的收敛性。 研究矩阵序列收敛性的常用方法&#xff0c;是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特…...

myArm 全新七轴桌面型机械臂

引言 在不断演进的科技世界中&#xff0c;我们始终追求创新和卓越&#xff0c;以满足客户的需求并超越他们的期望。今天&#xff0c;我们很高兴地宣布我们的最新产品——myArm 300 Pi&#xff0c;一款七轴的桌面型机械臂。这款产品的独特之处在于其灵活性和可编程性&#xff0c…...

tomcat乱码解决

解决乱码 1、修改bin\catalina.bat配置文件 修改tomcat的配置文件&#xff0c;找到tomcat路径下的\bin目录下的catalina.bat文件&#xff0c;修改 set “JAVA_OPTS%JAVA_OPTS% %JSSE_OPTS% -Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8 ” 2、修改conf\logging.properties配置…...

【Linux】详解线程第三篇——线程同步和生产消费者模型

线程同步和生消模型 前言正式开始再次用黄牛抢票来讲解线程同步的思想通过条件变量来实现线程同步条件变量接口介绍初始化和销毁pthread_cond_waitsignal和broadcast 生产消费者模型三种关系用基本工程师思维再次理解基于生产消费者模型的阻塞队列版本一版本二多生多消 利用RAI…...

k8s 安装

文章目录 k8s 客户端安装k8s集群minikubekindkubeadm 验证 k8s 客户端 用于连接k8s集群&#xff0c;建议下载1.23.x的版本&#xff0c;其他的版本本地运行可能会有莫名其妙的报错 https://dl.k8s.io/release/v1.23.16/bin/linux/amd64/kubectl 安装k8s集群 minikube Minik…...

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…...

【网络协议】IP

当连接多个异构的局域网形成强烈需求时&#xff0c;用户不满足于仅在一个局域网内进行通信&#xff0c;他们希望通过更高一层协议最终实现异构网络之间的连接。既然需要通过更高一层的协议将多个局域网进行互联&#xff0c;那么这个协议就必须为不同的局域网环境定义统一的寻址…...

Python 布尔类型

布尔值表示两个值之一&#xff1a;True&#xff08;真&#xff09;或False&#xff08;假&#xff09;。 布尔值 在编程中&#xff0c;您经常需要知道一个表达式是否为True或False。 您可以在Python中评估任何表达式&#xff0c;并获得两个答案之一&#xff1a;True或False。…...

iOS设备管理器iMazing比iTunes好用吗?有哪些优势

虽然 iTunes 是 Apple 官方指定的 iPhone 数据备份和管理工具&#xff0c;但是一直以来 iTunes 卡顿的使用体验和过慢的备份过程为不少人诟病。如果大家也被 iTunes 体验不佳的备份和管理功能所困扰&#xff0c;那么简单易用、功能强大的iMazing 能为你解决这个问题。 iMazing…...

Opengl之深度测试

在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 …...

利用ICG-NH2/Amine进行DNA标记1686147-55-6星戈瑞

ICG-NH2&#xff08;吲哚菁绿胺&#xff09;可以用于DNA标记&#xff0c;这种标记方法通常涉及到DNA上的胺基反应基团和ICG-NH2之间的化学反应。以下是一种常见的方法&#xff0c;用于利用ICG-NH2标记DNA分子&#xff1a; 步骤&#xff1a; 1.准备目标DNA&#xff1a;你需要准…...

Pyecharts数据可视化

Pyecharts数据可视化 1、Pyecharts模块2、柱状图3、折线图4、饼图5、散点图6、图表合并7、词云8、地图 1、Pyecharts模块 ECharts是百度提供的基于JavaScript的开源可视化库&#xff0c;主要用于Web端数据可视化 Echarts是通过JS实现的&#xff0c;Pyecharts则可以使用Python来…...

集合-List集合

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 什么是List? 二 . List集合的特点 三 . 常用方法 1.void add(int index, E element): 将指定的元素插入到列表的指定位置。 2.E remove(int in…...

vuex的使用

1 vuex的使用 1 vuex的使用 store/index.js -在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对vue应用中多个组件的共享状态进行集中式 的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意…...

raw图片处理软件:DxO PhotoLab 6 mac中文版支持相机格式

DxO PhotoLab 6 mac是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。 DxO PhotoLab 6支持多种相机品牌的RAW格式&#xff0c;包括佳能、尼康、…...

ReactPortals传送门

ReactPortals传送门 React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案&#xff0c;即允许将JSX作为children渲染至DOM的不同部分&#xff0c;最常见用例是子组件需要从视觉上脱离父容器&#xff0c;例如对话框、浮动工具栏、提示信息等。 描述 <div&…...

【GDB】 command 命令

GDB command 命令 语法 command 命令是一个很好用的调试命令&#xff0c;它配合断点使用&#xff0c;可以在指定的断点执行预先设置的命令 其语法为&#xff1a;command bread_id&#xff0c;这样会提示你输入你要执行的命令&#xff0c;以 end 结束。这个 bread_id 就是用 …...

1038 统计同成绩学生

输入样例&#xff1a; 10 60 75 90 55 75 99 82 90 75 50 3 75 90 88 输出样例&#xff1a; 3 2 0 solution #include <stdio.h> int main(){int n, d, k, hash[101] {0}, a[100000];scanf("%d", &n);for(int i 0; i < n; i){scanf("%d&quo…...

git报错:Failed to connect to 127.0.0.1 port 1080

Bug描述 由于在试了网上的这条命令 git config --global http.proxy socks5 127.0.0.1:1080 git config --global https.proxy socks5 127.0.0.1:1080git config --global http.proxy 127.0.0.1:1080 git config --global https.proxy 127.0.0.1:1080Bug描述&#xff1a;Faile…...

php eayswoole node axios crypto-js 实现大文件分片上传复盘

不啰嗦 直接上步骤 步骤1.开发环境配置 项目需要node.js 做前端支撑 官网下载地址&#xff1a; http://nodejs.cn/download/ 根据自己需要下载对应的版本,我下载的是windows系统64位的版本。 包下载好后 进行安装&#xff0c;安装步骤在此省略... 测试是否安装成功 …...

《Upload-Labs》01. Pass 1~13

Upload-Labs 索引前言Pass-01题解 Pass-02题解总结 Pass-03题解总结 Pass-04题解 Pass-05题解总结 Pass-06题解总结 Pass-07题解总结 Pass-08题解总结 Pass-09题解 Pass-10题解 Pass-11题解 Pass-12题解总结 Pass-13题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https…...

集团网站建设调研报告/长沙网络推广平台

参考&#xff1a;Tiny Spring 分析一&#xff0c;原文&#xff1a;1000行代码读懂Spring&#xff08;一&#xff09;- 实现一个基本的IoC容器 代码地址&#xff1a;https://github.com/xiaoxicode/jdk_source_1.7/tree/master/tinyspring 特此声明,本文不能算严格意义上的原创…...

深圳龙华今日疫情最新消息/太原网站制作优化seo

1.stack 栈容器先进后出&#xff0c;只有一个出口 栈中只有栈顶才可以被外界使用&#xff0c;因此栈不允许有遍历行为 构造函数&#xff1a; stack stk; stack(const stack &stk); 赋值操作&#xff1a; stack& operator(const stack &stk); 数据存取&#xff…...

如何优化网站内容/营销平台有哪些

浪花是如何形成的&#xff1f;如果把浪花拆解开来&#xff0c;它只剩下一个个水分子。如果再把这些水分子聚集起来&#xff0c;在潮汐力的作用下&#xff0c;浪花才能“涌现”出来。涌现&#xff0c;也是智慧诞生的方式。由简单的元素和简单的联接&#xff0c;构成一个足够复杂…...

求生之路2怎么做非官方网站/广州网站优化公司排名

题意&#xff1a;中文题&#xff0c;就不解释了。 题解&#xff1a;代码就像女生的裙子&#xff0c;越短看着越性感~~当我们选定树根&#xff0c;那么与他相邻为1的边最后一定会翻转奇数次才能变为0&#xff0c;与他相邻为偶数的边&#xff0c;最后一定翻转偶数次&#xff0c;所…...

vue适合什么网站开发/自媒体平台注册下载

工作流(Workflow)&#xff0c;就是“业务过程的部分或整体在计算机应用环境下的自动化”&#xff0c;它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使此目标的实现”。…...

网站服务器做缓存吗/手机如何制作自己的网站

详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框&#xff0c;对话框在Linux中可以友好的提示操作者&#xff0c;感兴趣的朋友可以参考学习一下。 当你在终端环境下安装新的软件时&#xff0c;你可以经常看到信…...