避免打开文件时自动切换到其他虚拟桌面

避免打开文件时自动切换到其他虚拟桌面

我已经在 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”

当您打开文件时(例如双击)应用该选项有点困难。

  1. 打开命令窗口以管理员身份运行

  2. 查找与文件扩展名相关的文件类型:

> 关联 .xls
.xls=Excel.工作表.8
  1. 查找用于打开该文件类型的命令:
> ftype excel.sheet.8
excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" "%1"
  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"
  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 用户。这种方案并不理想,因为您必须记住在打开新实例之前已经运行了哪些用户/实例。如果您只有几个,情况可能还不错。

创建每个用户:

设置 > 帐户 > 家庭和其他用户 > [+] 将其他人添加到这台电脑

  1. 我没有此人的登录信息
  2. 添加没有 Microsoft 帐户的用户
  3. 输入新用户名、密码和安全问题

要创建以指定用户身份启动 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

允许您继续在可执行文件的单个实例中运行 Excel(因此继续具有在工作簿之间复制和粘贴的能力)的一个解决方案是将 Excel 设置为显示在所有桌面上。

Windows 10:

  1. 打开任务视图(按 Win+Tab)
  2. 选择 (徘徊将鼠标指针悬停在虚拟桌面上,其中已打开 Excel。
  3. 右键单击或按住打开的 Excel 窗口,然后单击在所有桌面上显示此应用的窗口

Windows 11:

  1. 点击任务视图图标或按 Win+Tab任务视图图标
  2. 右键单击Excel 窗口
  3. 选择在所有桌面上显示此应用的窗口

答案4

我刚刚遇到这个问题,似乎很容易解决。我使用的是 Windows 11。如果您打开要使用的应用程序和窗口,比如说 2 个虚拟桌面,包括 2 个 Excel 电子表格,只需单击任务栏上的“桌面”按钮即可。这将打开一个屏幕,显示所有打开的窗口,底部显示所有桌面。只需将您想要的 Excel 窗口(比如说桌面 2)拖到桌面 2 上即可。完成!

相关内容