Win32: возможно ли создать приложение, в котором размещаются другие приложения? - PullRequest
3 голосов
/ 20 января 2009

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

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

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

Ответы [ 5 ]

1 голос
/ 06 февраля 2009

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

Я также написал приложение (не бесплатное, не с открытым исходным кодом), которое продвигает эту идею немного дальше, под названием WindowTabs .

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

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

1 голос
/ 20 января 2009

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

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

1 голос
/ 20 января 2009

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

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

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

0 голосов
/ 20 января 2009

В общем, всегда есть виртуальная машина.

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

0 голосов
/ 20 января 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...