我现在正在从 Kubuntu\Plasma 迁移到 Windows 11,但 Windows 的虚拟桌面方式让我很困扰。
我通常使用 6 个虚拟桌面,排列成 2 行 x 3 列。为了方便起见,我喜欢分配一个键绑定以直接转到其中一个(即 WINKEY + F1 转到桌面 1,WINKEY + F1 转到桌面 2 等)。我找不到如何执行任何操作,因此我想知道如何以及是否可以:
- 将我的虚拟桌面重新排列成两行;
- 添加按键绑定即可直接进入其中一个;
- 当我切换到我所在的桌面时,会闪现该桌面的名称。
答案1
不幸的是,Windows 虚拟桌面并未内置这些功能。
您可能能够使用第三方工具来获取它们,但这可能对您来说不够好。以下是一些:
- Windows 虚拟桌面助手将要切换桌面时显示桌面名称
- 虚拟空间可以选择将桌面排成一行,也可以使用键盘快捷键切换到特定桌面(但考虑到它完全超越了虚拟桌面,它可能无法与上面的虚拟桌面配合使用,在切换时显示桌面名称)
- 对于切换到特定桌面的键盘快捷键,有很多项目(例如:AHK-虚拟桌面库,VD.ahk:虚拟桌面,Windows 桌面切换器以及更多,每个都有自己的复杂性和细节)使用 AutoHotkey 脚本来实现(但这远非最佳体验,因为它的工作方式是先转到最左边的桌面,然后切换直到你选择的数字)
答案2
在 Windows 下无法重新排列桌面显示。
添加快捷方式Win+F?切换虚拟桌面需要使用第三方产品。我使用以下免费开源 自动热键。
以下脚本将映射这些键并切换桌面:
#Persistent
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetBatchLines -1
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
main(), return
RunHotkey:
switchToDesktop(StrReplace(A_ThisHotkey, "#F", , , 1) - 1)
return
switchToDesktop(idx)
{
global ppDesktopManager, IID_IVirtualDesktop
DllCall(vtable(ppDesktopManager, 7), "Ptr", ppDesktopManager, "Ptr*", pDesktops)
if (pDesktops) {
DllCall(vtable(pDesktops, 4), "Ptr", pDesktops, "UInt", idx, "Ptr", &IID_IVirtualDesktop, "Ptr*", VirtualDesktop)
if (VirtualDesktop) {
DllCall(vtable(ppDesktopManager, 9), "Ptr", ppDesktopManager, "Ptr", VirtualDesktop)
ObjRelease(VirtualDesktop) ; I assume these should be freed
}
ObjRelease(pDesktops)
}
}
main()
{
OnExit, cleanup
OnMessage(DllCall("RegisterWindowMessage", Str, "TaskbarCreated"), "WM_TASKBARCREATED")
static ImmersiveShell := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}")
global IID_IVirtualDesktop, ppDesktopManager
try ppDesktopManager := ComObjQuery(ImmersiveShell, "{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}", "{f31574d6-b682-4cdc-bd56-1827860abec6}")
if (!ppDesktopManager)
ppDesktopManager := ComObjQuery(ImmersiveShell, "{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}", "{AF8DA486-95BB-4460-B3B7-6E7A6B2962B5}")
GUID(IID_IVirtualDesktop, "{FF72FFDD-BE7E-43FC-9C03-AD81681E88E4}")
ObjRelease(ImmersiveShell)
Loop 9 {
Hotkey, #F%A_Index%, RunHotkey
}
return
cleanup:
if (ppDesktopManager)
ObjRelease(ppDesktopManager)
ExitApp
}
WM_TASKBARCREATED()
{
Reload
}
vtable(ptr, n) {
; NumGet(ptr+0) returns the address of the object's virtual function
; table (vtable for short). The remainder of the expression retrieves
; the address of the nth function's address from the vtable.
return NumGet(NumGet(ptr+0), n*A_PtrSize)
}
GUID(ByRef GUID, sGUID) ; Converts a string to a binary GUID
{
VarSetCapacity(GUID, 16, 0)
DllCall("ole32\CLSIDFromString", "Str", sGUID, "Ptr", &GUID)
}
本脚本改编自
[Windows 10] 在 Win+{1,9} 上切换到不同的虚拟桌面
安装 AutoHotKey 后,将上述文本放入一个.ahk
文件中并双击进行测试。您可以通过右键单击托盘栏中的绿色 H 图标并选择退出来停止脚本。要让它在登录时运行,请将其放在 的启动组中
C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
。
有用的 AutoHotkey 文档: