EdgeWebView2双屏场景下如何指定屏幕2为桌面捕获源
解决EdgeWebView2双显示器下桌面捕获源选择问题
问题根源分析
你当前的参数配置中,--auto-select-desktop-capture-source=Screen 2因值包含空格且未加引号,会被浏览器解析为两个独立部分:参数值仅识别为Screen,后续的2被当作无关参数,因此始终默认捕获屏幕1。此外,Windows系统中屏幕的实际名称可能并非Screen 2,这也会导致参数匹配失败。
解决方案步骤
1. 修正参数格式(处理空格问题)
将包含空格的捕获源名称用双引号包裹,确保浏览器正确识别完整参数值。修改代码中的参数追加逻辑:
// 转义双引号,保证参数值被完整解析 args.append(L" --auto-select-desktop-capture-source=\"Screen 2\"");
2. 获取屏幕的实际名称/设备ID
如果上述修改后仍无法捕获屏幕2,说明系统中屏幕的实际名称并非Screen 2。可通过WebView2的API枚举所有可用捕获源,获取准确的名称或设备ID:
// 在WebView初始化完成后调用(例如你代码中的lambda回调内) m_webview->get_DisplayCaptureSources( Callback<ICoreWebView2DisplayCaptureSourcesCompletedHandler>( [](HRESULT result, ICoreWebView2DisplayCaptureSources* sources) -> HRESULT { UINT32 sourceCount = 0; sources->get_Count(&sourceCount); for (UINT32 i = 0; i < sourceCount; ++i) { ICoreWebView2DisplayCaptureSource* source = nullptr; sources->GetValueAtIndex(i, &source); if (source) { PWSTR sourceName = nullptr; source->get_Name(&sourceName); PWSTR sourceId = nullptr; source->get_Id(&sourceId); // 输出屏幕信息,在控制台查看实际名称和ID wprintf(L"捕获源 %d: 名称=%s, ID=%s\n", i+1, sourceName, sourceId); // 释放资源 CoTaskMemFree(sourceName); CoTaskMemFree(sourceId); source->Release(); } } return S_OK; }).Get());
3. 使用准确的捕获源值设置参数
根据枚举到的屏幕实际名称或ID,替换参数值。比如实际屏幕2名称为显示器2,则参数设置为:
args.append(L" --auto-select-desktop-capture-source=\"显示器2\"");
或者使用设备ID(ID通常无空格,无需引号):
args.append(L" --auto-select-desktop-capture-source=12345678-1234-5678-1234-567812345678");
验证修改效果
重新编译运行程序,确认桌面捕获源已切换为屏幕2。
内容的提问来源于stack exchange,提问作者Shashank Shetty
相关产品推荐
相关产品推荐

