使用 Firemonkey 11.1,我有兩名員工使用 MacOS。
第一個
- Mac OS Catalina 與筆記本電腦 1280x800
- 外接顯示幕 1920x1080
第二個
- Mac OS Monterey 與筆記本電腦 1440x900
- 外接顯示幕 1920x1080

在第一個上,我可以截取筆記本電腦的螢屏截圖,但不能截取外接顯示幕。第二種情況正好相反。
我這樣截屏,然后嘗試一些解決方法:
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;
在第一個作業站上:
第一個螢屏
FID = 0ACaptureRect = 0, 0, 1280, 800- 螢屏截圖 OK 與第一個
CGDisplayCreateImageForRect
第二屏
FID = 1ACaptureRect = 1280, 0, 1920, 1080CGDisplayCreateImageForRect失敗的CGDisplayCreateImage(1)失敗的CGDisplayBounds失敗回傳 0, 0, 0, 0CGDisplayBounds#2 也失敗了
全桌面(螢屏 1 2)我可以用 0、0、3200、1920 截取全桌面截圖
在第二個作業站上:
第一個螢屏
FID = 0ACaptureRect = 0, 0, 1440, 900CGDisplayCreateImageForRect失敗的CGDisplayCreateImage(0)失敗的CGDisplayBounds失敗回傳0、0、1440、900CGDisplayBounds#2 也失敗了 0, 0, 1440, 900
第二屏
FID = 1ACaptureRect = 1440, 0, 1920, 1080- 螢屏截圖 OK 與第一個
CGDisplayCreateImageForRect
完整桌面(螢屏 1 2)它失敗了,因為它基于以前也失敗的顯示幕 0。
沒有邏輯為什么只有筆記本電腦螢屏在第一臺作業站上作業,而只有外部顯示幕在第二臺筆記本電腦上作業。
兩者都在同一螢屏上打開應用程式(在筆記本電腦上)
不同之處在于,在第二臺筆記本電腦上(在 Monterey 上),即使我無法使用筆記本電腦螢屏,也會CGDisplayBounds回傳合適的尺寸。
我沒有想法和解決方法
編輯:在第二個作業站的同一臺筆記本電腦上,但在 BigSur 版本(不是 Monterey)中一切正常!這太瘋狂了
uj5u.com熱心網友回復:
@ptitBoss:您的 FID 簡單不好,您以錯誤的方式檢索它。使用CGGetOnlineDisplayList,CGGetActiveDisplayList等函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474090.html
下一篇:MAC上的VBA-如何讀取給定檔案夾中的檔案名(必須避免使用WindowsActiveXFileSystemObject)
