Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从任意进程窃取NSWindow(或contentView)_Objective C_Cocoa_Macos_Macos Carbon - Fatal编程技术网

Objective c 从任意进程窃取NSWindow(或contentView)

Objective c 从任意进程窃取NSWindow(或contentView),objective-c,cocoa,macos,macos-carbon,Objective C,Cocoa,Macos,Macos Carbon,我想从另一个进程窃取一个NSWindow。最好是这样,但是一个NSView,也就是我从[window contentView]获得的视图也可以(特别是因为我认为我可以使用[view window]升级到NSWindow) 显然,这可能是未经记录的,而且难以置信地没有得到苹果(或Mac App Store)的批准。根据我的研究,这似乎可以通过苹果提供的易访问性API实现,但我还没有找到一种方法来实现 我已经查看了CGWindow.h,但它似乎没有提供我需要的东西 谢谢(这是我的第一篇SO帖子) 有

我想从另一个进程窃取一个
NSWindow
。最好是这样,但是一个
NSView
,也就是我从
[window contentView]
获得的视图也可以(特别是因为我认为我可以使用
[view window]
升级到
NSWindow

显然,这可能是未经记录的,而且难以置信地没有得到苹果(或Mac App Store)的批准。根据我的研究,这似乎可以通过苹果提供的易访问性API实现,但我还没有找到一种方法来实现

我已经查看了
CGWindow.h
,但它似乎没有提供我需要的东西

谢谢(这是我的第一篇SO帖子)


有人建议我提供一个非恶意的理由:简单!这是为了调试目的!而且,呃,任何人想做的任何事情,真的,因为这当然是可能的。我的一个密友,他是一个伟大的iOS黑客(MobileNotifier的开发者,如果你没听说过,可以在谷歌上搜索)已经建议注入捆绑包,我说可以建立一个分布式对象服务器,这样做会很好。所以我们可能会尝试这种方法。

你不能偷windows。自己做!如果你做了,那将是一个系统黑客/错误,苹果会发现。偷windows有什么好处?

你不能“偷”一个窗口,但你可以使用SIMBL或mach_inject/override之类的东西,向任意进程的窗口添加你想要的任何行为。

尽管我不相信OP说他写的东西是“非恶意的”,因为大多数开发工具使用工具API或更高级别的API来获取所需的信息,而不需要向正在运行的流程中注入任何内容-为了其他读者的利益,仍然需要一些基本的解释

“窗口”不是一回事。有几个实体与操作系统的不同部分相关,共同构成了“窗口”这件事,每个实体生活在不同的上下文、流程甚至硬件级别

您不能“窃取”NSWindow对象,因为它是一个简单的Objective-C对象,除了创建它的对象之外,它在任何过程中都没有意义

正确地说@alexy13,“创建您自己的!”,但我将进行扩展。NSWindow(或Carbon Window对象)都通过窗口ID(和其他几个属性)引用Windows Server窗口。原则上,您可以在不同的进程中使用多个NSWindow“包装”同一个Windows Server窗口

如果我理解操作的权利,他想拍一张“被盗”窗口的照片,这是一项合法的任务,可以在不偷任何东西的情况下完成。你只需要发现该窗口的Windows服务器ID并调用Windows服务器API来获取该窗口的照片


除此之外,如果您想控制“被盗”窗口,您可以通过创建窗口的原始价格中的原始NSWindow,通过向应用程序发送高级事件(最容易使用AppleScript实现)来实现移动、调整大小、关闭或任何其他您需要的控件或查询呼叫。

一些友好的建议:如果您能想出一个远程看似合理的非恶意原因,您可能会得到更多有用的响应。这就是Steam需要打开某些可访问性功能的原因吗?@MusiGenesis-补充道。我没有恶意尝试任何东西s、 因为这些都是本地的。但是,我希望生成的代码当然可以适应远程运行,特别是因为我可能会利用分布式对象。也就是说,任何人都可以利用已经存在的漏洞。我的代码都将是开源的,无论是BSD还是GPL(如果我必须使用其他人的GPL代码,就这样做),这样人们就可以确切地知道他们在运行什么。@Nathan S.-可能是为了游戏中的覆盖?不是特别确定,但这似乎是合理的。另一件很酷的事情是,你可以这样做。目前我正在使用
DYLD\u INSERT\u库
,将分布式对象服务器注入到他们的进程中。但是,这需要我开发的应用程序我将自己注入到重新启动中。然而,它是有效的。将来,我想用它来对任何正在运行的项目进行重新启动(如果进程崩溃,我会使用
DYLD\u INSERT\u库
)。我编写的应用程序是一个开发工具,我不会尝试任何恶意行为。