You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取GraphicsCaptureItem.TryCreateFromDisplayId所需的DisplayId?

如何在C#中获取GraphicsCaptureItem.TryCreateFromDisplayId所需的DisplayId?

嘿,我来帮你解决这个问题~你之前用new DisplayId(0)抓到两个显示器中间的区域,是因为这个虚拟值并不是系统里实际存在的显示器ID,得用正确的方式获取真实的DisplayId才行。

获取正确的DisplayId方法

你可以通过Windows.Devices.Display.Core.DisplayManager类来枚举系统中所有连接的显示器,每个显示器对象都会携带对应的DisplayId:

  1. 首先确保引用了Windows.Devices.Display.Core命名空间
  2. 用以下代码枚举并获取目标显示器的ID:
// 获取所有当前连接的显示器
var displays = DisplayManager.GetCurrent().GetCurrentDisplays();

foreach (var display in displays)
{
    DisplayId targetDisplayId = display.DisplayId;
    // 可以通过DisplayInformation判断是否是主显示器,或者根据位置筛选
    var displayInfo = DisplayInformation.GetForDisplayId(targetDisplayId);
    if (displayInfo.IsPrimary)
    {
        // 这就是主显示器的DisplayId,用来创建捕获项
        var captureItem = GraphicsCaptureItem.TryCreateFromDisplayId(targetDisplayId);
        if (captureItem != null)
        {
            // 成功创建屏幕捕获项,接下来就可以进行捕获操作了
        }
    }
}

替代方案:通过WindowId捕获窗口

如果你想捕获某个特定窗口(比如自己的应用窗口),可以获取对应的WindowId来创建捕获项:

// 获取当前应用窗口的WindowId
var currentWindowId = WindowId.GetFromWindow(Window.Current.CoreWindow);
var windowCaptureItem = GraphicsCaptureItem.TryCreateFromWindowId(currentWindowId);

这样就能精准捕获目标窗口,而不是用虚拟ID导致的错误区域啦。

备注:内容来源于stack exchange,提问作者citelao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:09:36