Одной из важных новых функций Windows является то, что теперь поддерживается несколько «виртуальных» рабочих столов, что позволяет вам организовывать коллекции окон вместе и разделять группы задач.
Это хорошо.
Вы можете перемещать окна между рабочими столами, нажав кнопку «Задачи», а затем щелкнув правой кнопкой мыши по окну приложения и выбрав «Переместить в...».
Это немного неуклюже и не очень хорошо.
У меня два монитора, и мне часто нравится, когда на втором мониторе проигрывается фильм, либо в веб-браузере, либо в медиаплеере, в то время как на главном экране у меня браузер и некоторые другие приложения. В моей текущей настройке это не проблема, просто работает.
С появлением виртуальных рабочих столов мне захотелось разместить браузер на одном виртуальном рабочем столе, а другое приложение на другом виртуальном рабочем столе и при этом иметь возможность смотреть видео при переключении рабочих столов, фактически отображая его наобавиртуальные рабочие столы. Использование стандартного приложения «Кино и ТВ» для воспроизведения видео и последующий переход на другой рабочий стол просто приводит к остановке видео без всякого предупреждения.
Это не хорошо.
Я надеялся, что либо у двух мониторов будет свой собственный виртуальный рабочий стол, либо будет какая-то опция «закрепить на всех рабочих столах», похожая на функцию «закрепленного окна», которую я видел во многих оконных менеджерах на базе Linux.
Есть ли способ этого добиться?
решение1
Эта функция теперь выпущена как одна из нескольких«Улучшения виртуального рабочего стола»вЮбилейное обновление Windows 10(Сборка 14316):
Теперь вы можете закрепить окно, чтобы оно было доступно на каждом рабочем столе. Для этого запустите Task View, затем щелкните правой кнопкой мыши по окну, которое вы хотите закрепить, и выберите «Показать это окно на всех рабочих столах». Попробуйте закрепить Skype или Groove Music, чтобы они всегда были у вас под рукой. А если у вас многомониторная настройка, вам может понравиться возможность иметь приложение электронной почты на втором мониторе, независимо от того, на какой рабочий стол вы переключаетесь.
решение2
Да. [почти :)] Каждое окно с атрибутом WS_EX_TOOLWINDOW видно на всех рабочих столах.
Autohotkey в этом деле очень помогает. Пример скрипта - MyLoop.ahk:
WS_EX_TOOLWINDOW := 0x00000080 Петля { WinSet, ExStyle, +%WS_EX_TOOLWINDOW%, ahk_class Chrome_WidgetWin_1 Сон,100 }
Добавьте это в автозагрузку Windows, и окно Google Chrome будет «прилипать» ко всем виртуальным рабочим столам.
Или назначьте это как горячую клавишу: Пример скрипта - MyHotkeys.ahk:
WS_EX_TOOLWINDOW := 0x00000080 +MButton::WinSet, ExStyle, ^%WS_EX_TOOLWINDOW%, A ^MButton::WinSet, AlwaysOnTop, переключение, A
Поместите это в автозагрузку Windows, и вы сможете ПЕРЕКЛЮЧАТЬ «закрепленное» состояние для любого окна, нажав Shift+кнопку средней кнопки мыши на нем.
Клавиша добавления - Ctrl+клик средней кнопки переключает состояние "самый верхний". Очень полезно.
PS: современные приложения (например, калькулятор Windows 10) почему-то игнорируют это. Не знаю почему. Но для окна проводника Windows и большинства "старых приложений" - это работает нормально
решение3
Основываясь на решении @idj выше, вот как это сделать на языке C:
exstyle = GetWindowLongPtr(hwndPtr, GWL_EXSTYLE);
exstyle |= WS_EX_TOOLWINDOW
SetWindowLongPtr(hwndPtr, GWL_EXSTYLE, exstyle);