我已经在 Windows 10 中使用虚拟桌面一段时间了。它运行良好,我发现的唯一问题并且希望解决的问题是以下场景:
- 我有虚拟桌面 1使用 Microsoft Excel 或 Microsoft Word 打开 Sheet.xlsx 或 Doc.docx
- 我有虚拟桌面版 2并即将打开另一个工作表/文档 Sheet2.xlsx 或 Doc2.xlsx
在这种情况下,它会切换到桌面 1因为它已经打开了 Excel / Word,而我希望它打开桌面版 2因为我在那里。当然,我可以将 Sheet2.xlsx / Doc2.xlsx 窗口移动到桌面 2,但我必须通过多任务手动执行此操作。
我没有尝试其他应用程序,但我猜测它的行为是相同的。
有没有办法避免这种行为并让 Windows 在当前虚拟桌面中打开其他文档/工作表?
答案1
自 MS Office 2013 以来,每个 Office 应用程序的窗口都在可执行文件的单个实例中运行。当实例打开新窗口时,任务视图首先切换到现有应用程序窗口。(我的另一个抱怨是多个 UNDO 命令按时间顺序跨多个窗口回溯,这绝不是我想要的。)
Word 和 Excel
我通过使用命令行选项在单独的实例中运行每个 Word 和 Excel 窗口解决了 Office 2016 中的问题。对于 Word,选项是/N
;对于 Excel,选项是/X
。这会花费一些额外的启动时间和一些额外的内存。我不会同时运行很多窗口,所以对我来说,减少烦恼是值得的。
对于桌面图标、自定义工具栏和其他快捷方式,您可以简单地编辑属性并将选项添加到目标命令行:
“C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE”/X“C:\Data\Weather\Weather Log.xls”
当您打开文件时(例如双击)应用该选项有点困难。
打开命令窗口以管理员身份运行。
查找与文件扩展名相关的文件类型:
> 关联 .xls .xls=Excel.工作表.8
- 查找用于打开该文件类型的命令:
> ftype excel.sheet.8 excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" "%1"
- 将该命令替换为包含以下选项的命令:
> ftype excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1"
- 对您使用的每个文件扩展名(例如 .xlsx)重复第 2 步。具有相同文件类型的文件无需进一步更改。
您可以通过将所有 Excel ftype 定义捕获到 .BAT 文件中来进行全面更改,编辑文件以ftype
在每行的开头和/X
每个 .EXE 之后添加,并(对于 .BAT 脚本)更改%1
为%%1
> ftype | 查找/i “office16\excel” > ftypes.bat > [你的文本编辑器] ftypes.bat (进行上述更改)
运行结果脚本应该产生类似如下的输出:
> ftypes.bat > ftype dqyfile=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X “%1” dqyfile=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X“%1” > ftype Excel.Addin="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Addin="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Backup="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Backup="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Chart=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X“%1” Excel.Chart=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X“%1” > ftype Excel.Chart.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Chart.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.CSV="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.CSV="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Macrosheet="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Macrosheet="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.OpenDocumentSpreadsheet.12="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.OpenDocumentSpreadsheet.12="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Sheet.12="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Sheet.12="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.SLK="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.SLK="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Template="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Template="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Template.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Template.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.Workspace="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.Workspace="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excel.XLL="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" Excel.XLL="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X "%1" > ftype Excelhtmlfile="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X Excelhtmlfile="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X > ftype Excelhtmltemplate="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X Excelhtmltemplate="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /X > ftype iqyfile=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X “%1” iqyfile=C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE /X“%1”
其他办公应用
某些 Office 应用(尤其是 PowerPoint)没有启动新实例的选项。但是,以其他用户身份运行应用会创建一个新实例。因此,一种解决方法是为您想要同时打开 PowerPoint 的虚拟桌面创建本地 Windows 用户。这种方案并不理想,因为您必须记住在打开新实例之前已经运行了哪些用户/实例。如果您只有几个,情况可能还不错。
创建每个用户:
设置 > 帐户 > 家庭和其他用户 > [+] 将其他人添加到这台电脑
- 我没有此人的登录信息
- 添加没有 Microsoft 帐户的用户
- 输入新用户名、密码和安全问题
要创建以指定用户身份启动 PowerPoint 的快捷方式,请编辑快捷方式的属性以使用以下命令:
runas /user:user2 /savecred "C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE"
runas
提示用户输入密码。 /savecred
第一次保存密码,随后使用保存的密码。您可能希望最初使每个快捷方式运行:普通窗口,然后将其更改为运行:最小化。
这些快捷方式可以位于 Windows 桌面上,也可以位于自定义工具栏菜单中。PowerPoint 运行后,您可以从那里打开 PPT 文件,也可以从文件资源管理器中拖入文件。如果您长时间处理几个 PPT 文件,则可以为每个文件创建一个快捷方式,并指定以哪个用户身份运行。
从 PPT 文件打开 PowerPoint 实例
不幸的是,将 PPT 文件拖到上面描述的桌面快捷方式之一上不起作用,因为runas
需要引用完整的 PowerPoint 命令行。直接打开 PPT 文件的快捷方式需要中间脚本来整理引号。创建一个脚本,例如“PowerPoint_用户“:
:: Usage: PowerPoint_User <username> <PPT filename>
:: Opens a PPT file as a specified user, starting a new PowerPoint instance on
:: the current virtual desktop if that user was not already running PowerPoint.
:: (%~f2 expands %2 to full path with no quotes. See "call /?".)
@echo off
C:\Windows\System32\runas.exe /user:%1 /savecred "POWERPNT.EXE \"%~f2\""
然后为每个用户创建一个快捷方式,使用以下命令:
C:\bin\PowerPoint_User.bat user2
如果快捷方式位于 Windows 桌面上,则可以将 PPT 文件拖到其中。如果您在 中创建快捷方式%USERPROFILE%\AppData\Roaming\Microsoft\Windows\SendTo
,则可以右键单击 PPT 文件并从“发给“菜单。无论哪种情况,请记住每个快捷方式在第一次运行时都会提示输入密码。
(如果需要调试快捷方式,请将其设置为运行:普通窗口,添加cmd /k
到命令前面,以及@echo off
从脚本中删除。)
答案2
Excel 使用相同的可执行文件来打开工作表,这就是它切换桌面的原因。解决方案是打开第二个实例Excel 的:
转到桌面 2:
- 打开“开始”菜单,搜索 Excel
- 按 ALT + 单击 Excel 符号
- 当系统询问“您是否要启动一个新的 Excel 实例?”时,按“是”。
我发现,在文件资源管理器中打开时,Excel 仅使用最新实例来打开工作表,即使选择了另一个实例。
因此,作为一种解决方法,如果您稍后想要在桌面 1 上打开另一个工作表,请转到该桌面上的实例(如果已关闭,则打开一个新实例),然后单击“文件 -> 打开”在该实例中打开一个新工作表。
答案3
答案4
我刚刚遇到这个问题,似乎很容易解决。我使用的是 Windows 11。如果您打开要使用的应用程序和窗口,比如说 2 个虚拟桌面,包括 2 个 Excel 电子表格,只需单击任务栏上的“桌面”按钮即可。这将打开一个屏幕,显示所有打开的窗口,底部显示所有桌面。只需将您想要的 Excel 窗口(比如说桌面 2)拖到桌面 2 上即可。完成!