62

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

Это хорошо.

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

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

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

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

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

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

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

3 ответа3

85

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

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

16

Ага. [почти :)] Каждое окно с атрибутом WS_EX_TOOLWINDOW видно на всех рабочих столах.

AutoHotkey очень помогает в этом. Пример скрипта - MyLoop.ahk:

WS_EX_TOOLWINDOW := 0x00000080
Loop
{
   WinSet, ExStyle, +%WS_EX_TOOLWINDOW%, ahk_class Chrome_WidgetWin_1
   Sleep,100
}

Поместите это в окно запуска Windows, и окно Google Chrome будет "прилипать" ко всем виртуальным рабочим столам.

Или назначьте это как горячую клавишу: Пример скрипта - MyHotkeys.ahk:

WS_EX_TOOLWINDOW := 0x00000080
+MButton::WinSet, ExStyle, ^%WS_EX_TOOLWINDOW%, A
^MButton::WinSet, AlwaysOnTop, toggle, A

Поместите это в автозагрузку Windows, и вы можете переключиться в "липкое" состояние для любого окна, нажав Shift+ средняя кнопка, щелкнув по нему.

Клавиша добавления - Ctrl+ нажатие средней кнопки переключит "самое верхнее" состояние. Очень полезно.

PS: современные приложения (например, windows 10 Calculator) как-то игнорируют это. Не знаю почему. Но для окна Windows Explorer и большинства «старых приложений» - все в порядке

1

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

exstyle = GetWindowLongPtr(hwndPtr, GWL_EXSTYLE);
exstyle |= WS_EX_TOOLWINDOW
SetWindowLongPtr(hwndPtr, GWL_EXSTYLE, exstyle);

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .