Jan*_*rup 12 google-chrome virtual-desktop windows-10
Windows 有虚拟桌面,这很棒。我使用单独的桌面来处理我正在处理的不同事情。但是,如果我关闭程序(或重新启动),那么当我再次打开该程序时,该程序会出现在我当前所在的桌面上。所以我必须手动将程序移回来。
我想对于 chrome 来说它甚至更复杂,因为它是不同窗口的相同程序。如果窗口能够保留在关闭之前的桌面上,那就太好了。
与这些问题类似,我的问题要求记住窗口位置而不是明确设置它。
编辑(2022):所有这些解决方法现在似乎都是不必要的。Chrome 现在将在桌面上打开 Chrome 关闭时的窗口。
这可以通过下面的AutoHotKey脚本来完成,该脚本接受两个快捷键:
FILENAME
开头的参数指定的文本文件中。将以下文本复制到.ahk文件中,可能会更改“FILENAME”、“F11”和“F12”。双击该文件以开始执行。它将在托盘栏中创建一个绿色的“H”图标,您可以右键单击该图标并选择Exit停止。如果您始终希望执行此脚本,请将其复制到位于 的用户启动文件夹中
C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup。
该脚本需要从 Github 项目 windows-desktop-switcher下载 DLL VirtualDesktopAccessor.dll 并将其存储在与 AutoHotKey 脚本相同的文件夹中。它可能不适用于 1809 以下的 Windows 10 版本。
脚本本身如下,仅针对一台显示器进行编程。它不会创建虚拟桌面,因此应在运行之前创建虚拟桌面。它对我有用,但应该进行测试。由于它使用未记录的功能,因此它可能会在未来某个时候停止工作。
DetectHiddenWindows Off
SetTitleMatchMode, 2
FILENAME = C:\Temp\possaves.txt
hVirtualDesktopAccessor := DllCall("LoadLibrary", Str, "VirtualDesktopAccessor.dll", "Ptr")
MoveWindowToDesktopNumberProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "MoveWindowToDesktopNumber", "Ptr")
IsWindowOnDesktopNumberProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "IsWindowOnDesktopNumber", "Ptr")
global numdesktops := GetDesktopsNumber()
F11:: ; Write list of "desktop@title"
EnumAddress := RegisterCallback("EnumWindowsProc", "Fast")
global numwins := 0
global file := FileOpen(FILENAME, "w")
DllCall("EnumWindows", "Ptr", EnumAddress, "Ptr", 0)
file.Close()
return
F12:: ; Read list and execute
global result
Loop, Read, %FILENAME%
{
word_array := StrSplit(A_LoopReadLine, "@",, 2) ; Omits periods.
hwnd := WinExist(word_array[2])
if (hwnd)
DllCall(MoveWindowToDesktopNumberProc, UInt, hwnd, UInt, word_array[1] - 1)
}
return
GetDesktopsNumber()
{
RegRead, cur, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\VirtualDesktops, CurrentVirtualDesktop
RegRead, alldesktops, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops, VirtualDesktopIDs
return floor(strlen(alldesktops) / strlen(cur))
}
EnumWindowsProc(hwnd, lParam)
{
WinGetTitle, title, ahk_id %hwnd%
if title {
desktopnum := GetHWNDDesktopNumber(hwnd)
if (desktopnum >= 0) {
numwins := numwins + 1
line = % desktopnum "@" title "`r`n"
file.Write(line)
}
}
return true
}
GetHWNDDesktopNumber(hwnd)
{
global numdesktops, IsWindowOnDesktopNumberProc
Loop, %numdesktops% {
ix := A_Index - 1
windowIsOnDesktop := DllCall(IsWindowOnDesktopNumberProc, UInt, hwnd, UInt, ix)
if (windowIsOnDesktop == 1)
return A_Index
}
return -1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5109 次 |
| 最近记录: |