Я ищу способ встроить другое приложение в свой собственный вид.Вложение приложения внутри OS X subview
Деловая причина в том, что компания имеет много небольших Electron apps (в основном небольшую портативную веб-программу с автономным браузером), которую компания хочет встроить в программу OS X. Эти приложения Electron идеально интегрируют и отображают внутри подматрицы без проблем, поэтому они выглядят как маленькие веб-фреймы внутри нашей более крупной программы.
Я думаю, что программно было бы проще всего открыть другую программу в качестве подсмотра, но я возьму все, что смогу получить. Возможно, даже захват NSWindow каким-то образом. (Electron source is available so it is easily discoverable.) Возможно, способ состыковать другую программу внутри моей или (отчаяние) найти ее представление и отправить команды, чтобы ограничить его размер и местоположение на вершине моего.
Пока все, что я нашел, говорит, что это действительно невозможно. Я обнаружил, что могу взять более отчаянный курс. Я могу запустить процесс, найти его представление и разместить его внутри пятна на моем дисплее; когда окно перемещается или прокручивается содержимое, отправляйте сообщения для перемещения другого окна. Но это действительно не интегрировано, меню остается отдельным и т. Д., Но я не могу его включить.
Любые идеи или полезные детали реализации?
EDIT 1: Спасибо за эти ответы. Как насчет того, чтобы электронные приложения могли каким-то образом показать их NSWindow? Может ли это быть использовано? Я думаю, что приложение может отправлять сообщения и (как-то, не совсем точно), чтобы установить родительское окно внутри этого. В Windows API это намного проще, поскольку вы можете называть SetParent ничем, даже элементами внутри разных процессов. Но какао кажется сложнее.
Некоторые части этого ответа определенно не правы. Вы не можете запускать несколько экземпляров NSApplication в потоках, и NSEvent не имеет приложения, которое я знаю. – duskwuff
@duskwuff Я не имел в виду создать экземпляр NSApplication в потоках, обновил свой ответ. NSEvent Я помню, что вы могли захватывать события мыши глобально, но как именно вы будете использовать это я не уверен – PnotNP
Использование fork/exec для запуска новых процессов запустило бы подпрограммы в виде отдельных приложений, которые OP уже сказал, что они пытались сделать (и wasn достаточно для их нужд). – duskwuff