我正试图在Agora的帮助下为Windows开发一个屏幕共享应用程序。当我使用函数StartScreenCaptureByScreenRect()时,我成功地捕获了整个VirtualScreen或主屏幕。当我试图捕捉另一个/第二个显示器时,我遇到了麻烦。
我的设置是2显示器1920x1080。当我尝试使用Screen.AllScreens时(它应该从System.Windows.Forms返回一个包含系统上所有显示的数组),例如,它不返回两个1920x1080监视器,它返回位于(0,0)位置的一个3840x1080监视器,布局是{主}{备用}。
我实际上想要做的是在VirtualScreen中找到每个屏幕/显示器的“坐标”(除了我知道的主坐标是(0,0))。我认为屏幕类是我所需要的,但它似乎没有我所需要的功能。我是做错什么了还是应该改变我的方法?
更新:
我设法得到了每个屏幕的位置和分辨率(x,y,宽度,高度),但我现在有了另外一个问题。如果屏幕位于主屏幕的上方和/或左侧,y和/或x将为负数。然后实例化一个矩形,将其传递给StartScreenCaptureByScreenRect(),该函数将返回一个无效的参数错误。它只适用于正x和y(如果屏幕在主屏幕的下方和/或右边)。
这是窃听器还是我漏掉了什么?
发布于 2020-09-01 00:56:14
这里的团结是不同的。你没做错什么。如果您能够获得3840x1080分辨率,那么您将非常接近于共享第二个显示。矩形( 1920,0,1920,1080)是您要放置的区域。例如,考虑以下代码:
TestRectCrop(0); // display 1
TestRectCrop(1); // display 2
void TestRectCrop(int order)
{
// Assuming you have two display monitors, each of 1920x1080, position left to right:
Rectangle screenRect = new Rectangle() { x = 0, y = 0, width = 1920 * 2, height = 1080 };
Rectangle regionRect = new Rectangle() { x = order * 1920, y = 0, width = 1920, height = 1080 };
int rc = mRtcEngine.StartScreenCaptureByScreenRect(screenRect,
regionRect,
default(ScreenCaptureParameters)
);
if (rc != 0) Debug.LogWarning("rc = " + rc);
}
发布于 2021-09-01 17:30:30
只是一个更新,如果你发现这个线程和寻找屏幕共享的例子-我们有这里是一个改进的例子,请使用这个来测试和调整您的桌面屏幕共享实现。
https://stackoverflow.com/questions/63677498
复制相似问题