【问题标题】:drawing in other processes windows on macosx?在macOS上绘制其他进程窗口?
【发布时间】:2009-12-21 11:49:18
【问题描述】:

是否可以使用 Cocoa 或其他库在 MacOSX 上绘制其他进程窗口?
如果有,有样品吗?或者快速总结一下我必须做什么?
(我需要至少支持 OSX 10.5)

共享内存当然是一种可能的解决方案,但我更喜欢直接绘制以避免同步开销和代码重复(用例由一个生产者n个客户端 em>)。

【问题讨论】:

  • 出于兴趣,您能否详细说明您到底想用这个做什么?是其他应用的某种注解吗?
  • 我有一个“主”应用程序和 n 个具有可绘制区域的浏览器插件。理想情况下,我希望避免通过共享内存中的额外缓冲区交换图像数据。

标签: objective-c cocoa macos ipc


【解决方案1】:

这是Mac OS X: Can one process render to another process’s window?的副本
简短回答:如果您只需要支持 >=10.6,您可能可以使用 IOSurface API。
这篇文章中的详细信息:Need help with IOSurface & OpenGL for max os x snow leopard application

如果您可以提供有关您尝试实现的目标的更多详细信息,则可能还有其他一些解决方案。 (例如,将您打算渲染的内容合成到来自CGWindowListCreateImage 的图像上)

编辑:
在我看来,完成您想要的最简单的方法是使用某种共享内存。
您可以使用mmap 将要可视化的数据映射到内存中,并在您的应用程序之间共享绘图代码。

编辑2: 我刚刚看到你想避免共享内存。但为什么呢?

【讨论】:

  • 谢谢。我从中得到的是它可能与 NSWindowSharingReadWrite 一起工作,但我不知道如何 - 也许有人同时想出来了?
  • 我最近也调查了共享状态(但用于阅读,而不是用于写作) - 我找不到任何有用的东西。如果您更成功,请在此处发布您的结果。
  • 关于共享内存,主要有两个原因:a)我不想要同步等开销。b)如果可能的话,我希望将绘图代码保留在客户端之外。如果我会怎么办?直接在视频缓冲区中或视频缓冲区中解码?
  • 好吧,我并没有更成功......所以我接受你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2023-01-27
  • 2012-01-15
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多