在全屏 3D 应用程序中获取桌面屏幕截图

2023-12-08

使用全屏 3D 应用程序(例如游戏)时是否可以将桌面渲染为屏幕截图?或者游戏运行时Windows会关闭渲染引擎吗?

我正在寻找将桌面渲染为游戏中纹理的方法。类似 RDP 的协议可以作为解决方案吗?

编辑:为了澄清,是否有任何深层 API 机制可以强制渲染到另一个缓冲区,例如在制作屏幕截图时。无论是 Windows 7 还是 Windows 8/9,都没有关系。


您可以通过在桌面窗口的 hWnd 上调用 PrintWindow Win32 API 函数来获取屏幕截图。我在 Windows 7 和 Windows 8.1 上尝试过此操作,即使在全屏运行另一个应用程序(VLC Player)时它也能正常工作,因此它也有可能适用于游戏。这只会为您提供没有任务栏的桌面图像,但其他可见的正在运行的应用程序不会显示在其上。如果您也需要这些,那么您还需要获取它们的 HWND(例如,通过枚举所有正在运行的进程并获取它们的窗口句柄),然后使用相同的方法。

using System;
using System.Drawing; // add reference to the System.Drawing.dll
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;

namespace DesktopScreenshot
{
  class Program
  {
    static void Main(string[] args)
    {
        // get the desktop window handle without the task bar
        // if you only use GetDesktopWindow() as the handle then you get and empty image
        IntPtr desktopHwnd = FindWindowEx(GetDesktopWindow(), IntPtr.Zero, "Progman", "Program Manager");

        // get the desktop dimensions
        // if you don't get the correct values then set it manually
        var rect = new Rectangle();
        GetWindowRect(desktopHwnd, ref rect);

        // saving the screenshot to a bitmap
        var bmp = new Bitmap(rect.Width, rect.Height);
        Graphics memoryGraphics = Graphics.FromImage(bmp);
        IntPtr dc = memoryGraphics.GetHdc();
        PrintWindow(desktopHwnd, dc, 0);
        memoryGraphics.ReleaseHdc(dc);

        // and now you can use it as you like
        // let's just save it to the desktop folder as a png file
        string desktopDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        string screenshotPath = Path.Combine(desktopDir, "desktop.png");
        bmp.Save(screenshotPath, ImageFormat.Png);
    }

    [DllImport("User32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool PrintWindow(IntPtr hwnd, IntPtr hdc, uint nFlags);

    [DllImport("user32.dll")]
    static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);

    [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle); 
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在全屏 3D 应用程序中获取桌面屏幕截图 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • WIX 工具集 - 自定义操作命令无法正确检测 Windows 10 版本

    我有一个安装程序 可以部署并运行单独的 exe文件以将驱动程序部署到系统 不幸的是 微软似乎已经放弃了对VersionNTWindows 10 及更高版本中的宏 所以我实施了另一篇文章中建议的方法 https stackoverflow c
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • 如何在.NET中不使用乘法运算符来实现乘法[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想在 NET中实现两个整数的乘法而不使用乘法运算符 public uint Multi
  • 写入我的临时文件的权限被拒绝

    我正在尝试使用 Python 在 Windows 操作系统上创建并写入临时文件 我已经使用了Python模块tempfile创建一个临时文件 但是当我去写入临时文件时出现错误Permission Denied 我不允许写入临时文件吗 难道我
  • android.database.sqlite.SQLiteException:靠近“Group”:语法错误(代码1):

    Error Caused by android database sqlite SQLiteException near Group syntax error code 1 while compiling create table Grou
  • C#/Native:使用 SCSI PassThrough 读取 HDD 串行

    我编写了三种利用本机的不同方法CreateFile and DeviceIoControl调用以检索 HDD 序列号 而不是型号 第一个使用S M A R T 第二个使用Storage Query第三个使用SCSI PassThrough
  • JSF 标签未呈现[重复]

    这个问题在这里已经有答案了 我正在启动一个 JSF 项目 这是我第一次使用 JSF 并且在呈现标签时遇到问题 我正在 Eclipse 中进行开发并使用 TomCat 作为服务器 我的login jsp 文件 https gist githu
  • 无法加载包“Microsoft.Net.Native.SharedLibrary-x64”

    我要更新Microsoft NETCore UniversalWindowsPlatform但它显示一个错误 Unable to load package Microsoft Net Native SharedLibrary x64 如果我
  • 为什么在销毁对象后使用该对象时没有收到异常?

    下面的代码工作得很好 但它不应该 当我单击 Button1 时 该对象首先被销毁 然后使用其值 并且我没有收到任何访问冲突或其他内容 更重要的是 乘法运算给出了正确的结果 这证明了Obj1没有被毁掉 但话又说回来 这也不是真的 因为当我关闭
  • 将 fileChooserParams 中的 mime 类型转换为 Intent.setType 的正确格式

    我正在尝试使用 Android 中的 WebView 上传文件 This is the code in use TargetApi Build VERSION CODES LOLLIPOP Override public boolean o
  • 在局部变量的嵌套函数内部使用“get”

    我从来没有完全理解嵌套函数和通过引用传递参数 我的策略通常是做类似的事情get variabletopassbyreference 在子函数内部来完成此操作 到目前为止 我一直将全局变量传递给函数 并且效果很好 今天 我尝试在函数内创建局部
  • 使用 JavaScript 将 Excel 转换为 PDF

    如何自动将 Excel 文档 文件 转换为 PDF 我正在尝试调整找到的解决方案here脱颖而出 到目前为止我有这个 var fso new ActiveXObject Scripting FileSystemObject var docP
  • 禁用 freemarker 日志

    我正在使用 Struts 2 0 11 2 但我不知道我的应用程序最近发生了什么变化 我收到了大量的 freemarker 日志 DEBUG 13201 freemark template simple hidden ftl en UTF
  • 如何将 LaTeX/amsmath 与 matplotlib 一起使用?

    当我尝试在 matplotlib 中使用 LaTeX amsmath 包时 出现了一系列难以理解的错误 有没有人能够让这样的事情发挥作用 如果是这样 我很想看一个例子 这是我尝试过的 import matplotlib from matpl
  • iPhone 上的 UIPopoverPresentationController 不产生弹出窗口

    我正在尝试实施新的UIPopoverPresentationController在我的 iPhone 应用程序中 使用 Objective C 我想要的是一个简单的弹出窗口 其中包含从启动按钮发出的表格视图 Edit 这是我的REVISED
  • Python 3.4.0 与 MySQL 数据库

    我已经安装了Python版本 3 4 0我想做一个使用 MySQL 数据库的项目 我下载并尝试安装MySQLdb 但对于这个版本的 Python 来说并不成功 有什么建议可以解决这个问题并正确安装吗 MySQLdb 不支持 Python 3
  • 为什么这个内存地址 %fs:0x28 ( fs[0x28] ) 有一个随机值?

    我编写了一段 C 代码 并将其反汇编并读取寄存器以了解程序在汇编中的工作原理 int test char this char sum buf 6 strncpy sum buf this 32 return 0 我一直在检查的代码片段是测试
  • Python:使用 isin 或 wkn 调用 pandas_datareader 或将其转换为股票代码?

    我有一份包含 ISIN 和 WKN 编号的股票清单 我的目标是使用 pandas datareader 获取该股票的历史数据 我的问题是 该功能例如 import pandas datareader as web stock web Dat
  • Android HttpPost:如何获取结果

    我一直在尝试发送 HttpPost 请求并检索响应 但即使我能够建立连接 我仍然不知道如何获取请求响应返回的字符串消息 HttpClient httpclient new DefaultHttpClient HttpPost httppos
  • 在 PHP 中从 MySQL 创建下拉菜单?

    我对 PHP 和 MySQL 有一定的经验 所以我有点掌握了一些东西 但是我有点试图得到一些可能超出我水平的东西 不太确定这方面的难度级别 基本上 我希望创建 2 个下拉菜单来删除 MySQL 表中用户的访问权限 因此 第一个下拉菜单将用于
  • solr 评分 - fieldnorm

    当我搜索 iphone 时 我有以下记录和分数 记录1 字段名称 显示名称 Iphone FieldName 名称 Iphone 11 654595 MATCH sum of 11 654595 MATCH max plus 0 01 ti
  • 在全屏 3D 应用程序中获取桌面屏幕截图

    使用全屏 3D 应用程序 例如游戏 时是否可以将桌面渲染为屏幕截图 或者游戏运行时Windows会关闭渲染引擎吗 我正在寻找将桌面渲染为游戏中纹理的方法 类似 RDP 的协议可以作为解决方案吗 编辑 为了澄清 是否有任何深层 API 机制可