私はちょうど同じ問題を抱えていました。このkCGWindowImageBoundsIgnoreFraming
オプションは、以下を指定できるように文書化されていますCGRectNull
。
要求されたキャプチャ四角形が の場合、CGRectNull
このオプションを使用すると、ウィンドウ領域のみがキャプチャされ、ウィンドウ フレーミング エフェクトが占める領域はキャプチャされません。
しかし、私にとってはkCGWindowListOptionIncludingWindow
、唯一のウィンドウオプションとして指定する必要がありました. これは、ドキュメントの内容と少し矛盾しています。
意味のある結果を取得するには、このオプションをkCGWindowListOptionOnScreenAboveWindow
orオプションと組み合わせる必要があります。kCGWindowListOptionOnScreenBelowWindow
しかし、そのアドバイスに従えば、スクリーンショットは常に画面全体でした。要約すると、次のことが期待どおりに機能しました。
CGImageRef windowImage = CGWindowListCreateImage(
CGRectNull,
kCGWindowListOptionIncludingWindow,
windowID,
kCGWindowImageBoundsIgnoreFraming);
(または、ほぼ予想どおり - スクリーンショットにはまだウィンドウのタイトルバーが含まれており、ウィンドウkCGWindowImageBoundsIgnoreFraming
のタイトルバーもスキップされることを意味することを望んでいました)。