Закрепление приложений на нескольких рабочих столах в Windows 10

Одной из больших новых функций для Windows является тот факт, что несколько "виртуальных" рабочих столов теперь изначально поддерживаются, что позволяет вам организовывать коллекции окон вместе и отдельные группы задач.

Это хорошо.

Вы можете перемещать окна между рабочими столами, нажав кнопку "Задачи", а затем щелкнув правой кнопкой мыши окно приложения и выбрав "Переместить в..."

Это немного неуклюже и не совсем так хорошо.

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

С появлением виртуальных рабочих столов я хотел разместить браузер на одном виртуальном рабочем столе, а другое приложение - на другом виртуальном рабочем столе, и при этом иметь возможность просматривать видео при переключении рабочих столов, эффективно отображая его на обоих виртуальных рабочих столах. Использование стандартного приложения "Фильмы и ТВ" для воспроизведения видео, а затем переход на другой рабочий стол просто приводит к остановке видео без предупреждения.

Это не хорошо.

Я надеялся, что либо у двух мониторов будет свой собственный виртуальный рабочий стол, либо у них будет какая-то опция "прикрепить ко всем рабочим столам", похожая на функцию "прикрепленного окна", которую я видел во многих оконных менеджерах на основе Linux.

Есть ли способ добиться этого?

3 ответа

Решение

В настоящее время эта функция выпущена как одно из нескольких "улучшений виртуального рабочего стола" в годовом обновлении Windows 10 (сборка 14316):

Теперь вы можете закрепить окно, чтобы оно было доступно на каждом рабочем столе. Для этого запустите Task View, затем щелкните правой кнопкой мыши на окне, которое вы хотите закрепить, и выберите "Показать это окно на всех рабочих столах". Попробуйте закрепить Skype или Groove Music, чтобы они всегда были у вас под рукой. И если у вас есть настройка multi-mon, вам может понравиться возможность размещать приложение электронной почты на втором мониторе независимо от того, на какой рабочий стол вы переключаетесь.

Ага. [почти:)] Каждое окно с атрибутом 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 Calculator) как-то игнорируют это. Не знаю почему. Но для окна Windows Explorer и большинства "старых приложений" - все работает нормально

Основываясь на решении @idj выше, это как сделать это в C:

exstyle = GetWindowLongPtr(hwndPtr, GWL_EXSTYLE);
exstyle |= WS_EX_TOOLWINDOW
SetWindowLongPtr(hwndPtr, GWL_EXSTYLE, exstyle);
Другие вопросы по тегам