如何在C#中获取GraphicsCaptureItem.TryCreateFromDisplayId所需的DisplayId?
如何在C#中获取GraphicsCaptureItem.TryCreateFromDisplayId所需的DisplayId?
嘿,我来帮你解决这个问题~你之前用new DisplayId(0)抓到两个显示器中间的区域,是因为这个虚拟值并不是系统里实际存在的显示器ID,得用正确的方式获取真实的DisplayId才行。
获取正确的DisplayId方法
你可以通过Windows.Devices.Display.Core.DisplayManager类来枚举系统中所有连接的显示器,每个显示器对象都会携带对应的DisplayId:
- 首先确保引用了
Windows.Devices.Display.Core命名空间 - 用以下代码枚举并获取目标显示器的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
相关产品推荐
相关产品推荐

