Украсть NSWindow (или contentView) из произвольного процесса - PullRequest
2 голосов
/ 03 апреля 2011

Я бы хотел украсть NSWindow из другого процесса.Желательно, чтобы, но NSView, то есть тот, который я получил бы от [window contentView], тоже было бы хорошо (особенно если учесть, что я могу подняться до NSWindow с [view window].

Очевидно, что это, вероятно, недокументировано и невероятно не одобрено Apple (или Mac App Store). Из моего исследования кажется, что это может быть осуществимо с помощью API-интерфейса доступности, который предоставляет Apple, однако мне еще не удалось найти способсделайте это.

Я посмотрел на CGWindow.h, но, похоже, он не дает того, что мне нужно.

Спасибо (это мой первый пост SO).

Мне посоветовали указать причину, которая не является гнусной: простая! Это для целей отладки! И, ну, на самом деле, для всего, что кто-либо хочет сделать, на самом деле, потому что это будет возможно, конечно. Один из моих близких друзей, которыйотличный хакер iOS (разработчик MobileNotifier, поищите его в Google, если вы о нем не слышали), предложил внедрить пакеты, которые, как я сказал, могли бы создать сервер распределенных объектов, который затем работал быОтлично.Поэтому мы, вероятно, попробуем этот подход.

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Вы не можете «украсть» окно, но вы можете использовать что-то вроде SIMBL или mach_inject / override, чтобы добавить любое поведение, которое вы хотите, к окнам произвольных процессов.

0 голосов
/ 29 февраля 2016

Несмотря на то, что я не верю ОП, что он пишет что-то «не злонамеренное», так как большинство инструментов разработчика используют API инструментария или API более высокого уровня для получения необходимой информации, без необходимости вводить что-либо в работающий процесс - все еще некоторые Основное объяснение должно быть в пользу других читателей.

«Окно» - это не одно. Есть несколько сущностей, связанных с различными частями ОС, которые вместе составляют «окно», каждый из которых живет в своем контексте, на уровне процесса и даже на уровне оборудования.

Вы не можете "украсть" объект NSWindow, потому что это простой объект Objective-C, который не имеет никакого значения ни в одном процессе, кроме того, который его создал.

Правильно сказал @ alexy13: «Создай свой собственный!», Но я продолжу. NSWindow (или объект Carbon Window) оба ссылаются на окно Windows-Server через идентификатор окна (и несколько других атрибутов). В принципе, вы можете «обернуть» одно и то же окно Windows-Server несколькими NSWindows в разных процессах.

Если я правильно понимаю ОП, он хотел бы сфотографировать это «украденное» окно, и это законная задача, которую можно выполнить, не крадя ничего. Вам просто нужно узнать идентификатор Windows-Server этого окна и вызвать API Window-Server, чтобы получить изображение этого окна.

Помимо этого - если вы хотите управлять «украденным» окном, вы можете сделать это через оригинальное NSWindow в оригинальной цене, которая создала окно, отправив приложению событие высокого уровня (проще всего это сделать с помощью AppleScript) переместить, изменить размер, закрыть или любой другой вызов управления или запрос вам нужно.

0 голосов
/ 14 апреля 2011

Вы не можете украсть окна. Сделать свой собственный! Если вы это сделаете, это будет системный взлом / ошибка, и Apple узнает об этом. Что хорошего в краже окон?

...