Win32: можно ли создать приложение, в котором размещены другие приложения?

Мне было интересно, как бы вы написали приложение, в котором в основном размещались бы другие приложения?

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

В качестве альтернативы, кто-нибудь знает простое в использовании / интуитивно понятное приложение для ограничения окон "областями" вашего экрана? Что-то вроде GridMove, но более интуитивно понятное и менее сложное?

Только заметил, что мой пост был отредактирован из-за приветствия и благодарности в конце. Не то чтобы меня это злило / раздражало / и т. д., А просто любопытно - сделал ли я что-то не так?

Eddie Parker 20.01.2009 03:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
343
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Множественные интерфейсы документов может вам помочь.

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

Если OP - опытный пользователь, которому нужен другой оконный менеджер, потому что он запускает сразу много приложений, то это действительно не применимо. Это также не та проблема, которую я хотел бы решить - это был бы способ уменьшить количество окон.

Вы действительно прочитали вопрос? Я не думаю, что MDI станет заменой оконного менеджера для OP.

GEOCHET 20.01.2009 00:31

Извините, если я не понял, но да, взрыв окон означает несколько окон приложений. В основном я пытаюсь создать приложение, которое действует как MDI для приложений Другие, то есть тех, которые ему не принадлежат. Предложение dreamlax звучит так, как будто оно может сработать.

Eddie Parker 20.01.2009 01:49

Я думаю, что то, что вы описываете, обычно называется оконным менеджером. Оболочка Windows сама по себе является (плохим) примером оконного менеджера. Возможно, вы захотите изучить некоторые альтернативы. Я знаю, что портирование KDE на Windows было успешным, так что вы можете посмотреть текущее состояние этого проекта.

Microsoft также предоставляет PowerToy (IIRC), который обеспечивает поддержку виртуальных рабочих столов, но это действительно плохо. Вы думали о том, чтобы просто получить второй монитор (и, возможно, такую ​​утилиту, как MultiMon Taskbar, чтобы получить вторую панель задач на другом мониторе)?

Ответ принят как подходящий

Вы можете создать окно, затем перечислить все окна, которые имеют стиль WS_OVERLAPPEDWINDOW, выбрать те, которые принадлежат приложению, которое вы хотите разместить, затем вызвать SetParent в окне, установив родительский элемент для созданного вами окна. Вы также можете использовать FindWindow, чтобы найти окно по его заголовку.

Все окна внутри дома никогда не могут выходить за границы окна дома, но при этом соблюдают все те же правила. Вы по-прежнему можете перетаскивать окна и т. д.

Проблема здесь в том, что если приложение внутри дома создает другое окно, его родителем, скорее всего, будет окно рабочего стола, а не окно дома.

Хммм, это звучит интересно. Я, вероятно, мог бы использовать ловушку Windows, чтобы поймать создание новых окон и переродить их после этого, если это единственный случай, о котором вы упомянули. Мне придется попробовать, спасибо dreamlax, это звучит примерно так, как я хочу.

Eddie Parker 20.01.2009 01:50

В общем, всегда есть ВМ.

Это может быть излишним или неработающим в зависимости от специфики того, что вы пытаетесь сделать. Но VMWare позволит вам копировать / вставлять файлы и текст между вашей виртуальной машиной и локальным компьютером, так что это не так уж и далеко до настоящего оконного менеджера. Системные требования даже не такие уж и возмутительные, учитывая, сколько памяти занимает iTunes + типичный браузер.

Вот код, который использует FindWindow / SetParent для создания представления с вкладками, объединяющего различные приложения Док-станция для джедаев

Я также написал приложение (не бесплатное, не с открытым исходным кодом), которое развивает эту идею немного дальше, и оно называется WindowTabs. ВНИМАНИЕ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Единственное предостережение, которое я хотел бы вам сделать, это то, что не всем приложениям нравится быть родителями. Если вы пишете .NET, там есть кое-что из «Готча» (вот почему WindowTabs не использует родительский контроль).

Кроме того, как правило, после того, как вы выполняете SetParent, вы присоединяетесь к потокам на уровне Win32, что означает, что если один зависнет, все они будут тостами.

Полагаю, вы не упомянули об этом в своем сообщении, поскольку это, вероятно, «секретный соус» WindowTab, но что тогда WindowTabs использует, если не воспитание?

Eddie Parker 10.02.2009 05:29

Хотел бы я быть достаточно умным, чтобы приготовить секретный соус! В основном я просто использую MoveWindow и SetWindowPos вместе с добавлением перехватчика в дочерние процессы для синхронизации стыковочного окна и закрепленного окна. Я размещу в блоге статью об архитектуре и в какой-то момент обновлю ее ссылкой.

Maurice Flanagan 10.02.2009 18:40

+1 Привет! Я только что услышал о программных "вкладках" и попробовал. Это потрясающе. Мне было интересно то же самое, и я был о том, чтобы задать вопрос о SO о том, как это можно построить? Из-за привычки сначала искать, к счастью, я нашел вас (автора оконных вкладок) здесь. Прошло более 1,5 лет с тех пор, как вы разместили этот комментарий. Вы писали это сообщение в блоге? Где ссылка? Я хочу знать его архитектуру.

claws 14.10.2010 22:15

Я не хочу превращать свой ответ в бессовестную пробку для моего продукта :) Напишите мне, и я буду рад ответить на любые ваши вопросы об архитектуре.

Maurice Flanagan 19.10.2010 03:53

Другие вопросы по теме