Тайловый менеджер для Windows своими руками на C# Windows Form

Kate

Administrator
Команда форума
Для своих нужд я использую личный компьютер с установленной операционной системой Linux. А для работы необходимо использовать Windows. И иногда хочется какие-то инструменты перенести из мира Linux в мир Windows. Хороших инструментов в среде Linux немало. В Windows тоже, конечно, много хорошего, но иногда бывает не хватает тех или иных инструментов.

Именно подобное сравнение часто приводит меня к написанию каких-то новых программ, которых не хватает, а найти аналоги не получается.

Например вот инструмент тайловый оконный менеджер (Tiling window manager) это менеджер который делает из окон не пересекающие области. В отличии от окон в классическом представлении, когда мы можем накладывать друг на друга различные приложения.

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

Я понимаю что в Windows управление окнами становится лучше с каждой версией. В Windows 7 появилось несколько таких новых возможностей, которые позволяют быстро развернуть окно только по вертикали или расположить его ровно на половине экрана, справа или слева. Но это всё равно не решает проблему перекрытия окон.

Поэтому я сначала поискал аналоги, но все они не устраивали меня по разным причинам. В основном все инструменты, не делают какую-то обертку, которую можно включить или выключить, а начинают форматировать все окна, которые открыты в данный момент. Это немного не то, что мне нужно, потому что иногда нужно развернуть одно окно на весь экран, чтобы сосредоточиться, а иногда разделить 4 части.

Таким образом я понял, что можно попробовать написать, что-то своё.

Возможности программы​

Работа с окнами​

В итоге у меня получилась такая небольшая программка как на картинке выше. Идея заключалась в том, что появляются области, в которые можно перемещать любые программы, которые уже запущены:

dcac42d909717dbab6da333091efa9d7.png

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

Кстати сами формы взяты из библиотеки DockPanelSuite это помогло решить о большую часть проблем с размещением окон.

Работа с браузером​

Дальше мне захотелось адаптировать сам браузер. Его тоже можно занести в форму, но верхняя панель вкладок всё равно остается и это неудобно:

3d881024724bba5b236164f15423279e.png

Поэтому я решил прикрутить еще и свой браузер на основе Chromium, к счастью, уже есть готовый пакет CefSharp.WinForms, который не сложно подключается.

И теперь это выглядит так:

a6711cd8299ab99768cbff2c2f136207.png

Теперь у меня есть свой полноценный браузер, правда лишенный всех возможностей отладки профилирования и прочих удобств. Но всё равно получилось достаточно удобно в использовании.

Работа с сессиями​

Еще одна фича которая мне нужна была это сохранение состояний открытых окон. Я назвал это сессиями, но пока есть возможность сохранять только одну сессию:

d84a2a85d0a056965dccf2dd3ed2303d.png

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

Заключение​

Вот так мне удалось написать небольшую программку, которая помогает в работе. Я активно её использую и продолжаю дорабатывать. Если есть какие-то идеи то буду рад любым предложениям.

Источник статьи: https://habr.com/ru/post/555024/
 
Сверху