在 MacOS 上截图

Take screenshot on MacOS

使用 Firemonkey 11.1,我有两名员工使用 MacOS。

第一个

第二个

在第一个上,我可以截取笔记本电脑的屏幕截图,但不能截取外接显示器。第二次正好相反

我这样截屏,然后尝试一些解决方法:

LImage := CGDisplayCreateImageForRect(FID, RectToCGTrect(ACaptureRect));

if not Assigned(LImage) then
  LImage := CGDisplayCreateImage(FID);

if not Assigned(LImage) then 
begin
  LBounds := CGDisplayBounds(FID);
  LImage := CGDisplayCreateImageForRect(FID, LBounds);
end;

if not Assigned(LImage) then 
begin
  LBounds := CGDisplayBounds(FID);
  LBounds.origin.x := 0;
  LBounds.origin.y := 0;

  LImage := CGDisplayCreateImageForRect(FID, LBounds);
end;

在第一个工作站上:

第一屏

第二屏

完整桌面(屏幕 1 + 2) 我可以使用 0, 0, 3200, 1920

截取完整的桌面截图

在第二个工作站上:

第一屏

第二屏

完整桌面(屏幕 1 + 2) 它失败了,因为它基于之前也失败过的显示器 0。

为什么只有笔记本电脑屏幕在第一台工作站上工作,而只有外部显示器在第二台笔记本电脑上工作,这是不合逻辑的。

两者都在同一屏幕上打开了应用程序(在笔记本电脑上)

不同之处在于,在第二台笔记本电脑(在蒙特雷)上,即使我不能拿笔记本电脑的屏幕,CGDisplayBounds return 大小合适。

我没有想法和解决方法

编辑:在第二个工作站的同一台笔记本电脑上,但在 BigSur 版本(不是 Monterey)中一切正常!太疯狂了

@ptitBoss:你的FID简单不好,你找错了。使用 CGGetOnlineDisplayListCGGetActiveDisplayList 等函数