Windowsには素晴らしい仮想デスクトップがあります。私は自分が取り組んでいるさまざまなことに別々のデスクトップを使用しています。しかし、プログラムを閉じる(または再起動する)と、プログラムを再度開くと、現在使用しているデスクトップにプログラムが表示されます。そのため、手動でプログラムを元に戻す必要があります。
chromeは、同じプログラムでウィンドウが異なるため、さらに複雑になると思います。ウィンドウを閉じる前のデスクトップに置いておくと便利です。
これらの問題と同様に、明示的に設定するのではなく、ウィンドウの位置を覚えておくように求める私の質問の違いがあります。
これは、以下の AutoHotKey スクリプトを使用して実行できます。このスクリプトは、2つのショートカットキーを受け入れます。
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より前のWindows10バージョンでは機能しない可能性があります。
スクリプト自体は以下にあり、1つのモニターに対してのみプログラムされています。仮想デスクトップは作成されないため、実行する前に作成する必要があります。それは私のために働いたが、テストされるべきである。文書化されていない機能を使用しているため、将来的には機能しなくなる可能性があります。
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
}
Harrymcのソリューションを試しましたが、Win1064ビットv1903で正常に機能しました。このソリューションでは、異なる仮想デスクトップ(Fn + F11)で実行されている複数のChromeウィンドウを記録できます。再起動後にすべてのChromeウィンドウが同じ仮想デスクトップに表示される場合、 (Fn + F12)を使用すると、各Chromeウィンドウが記録された仮想デスクトップに送信されます。
10台の仮想デスクトップに分散された50個のChromeウィンドウを試してみました。ファイルの生成には2〜3秒かかりました。
@harrymc:ありがとうございました!何らかの理由で、ラップトップでFn + F11またはFn + F12を押す必要があります。 F11キーとF12キーだけでは、AutoHotKeyスクリプトの機能はトリガーされません。
現在、そのようなプレーンWindowsを構成する方法はありませんが、この問題は、VDesk( https://github.com/eksime/VDesk )と呼ばれるサードパーティの軽量ユーティリティを使用することで解決できます。特定の仮想デスクトップでプログラムを起動するショートカットを作成できます。
また、別の仮想デスクトップに切り替えずにプログラムを起動することもできます(実際には、手動でそのデスクトップに切り替えるまで、そのアプリを非表示にして実行します)。これは非常に便利な機能です。
特にChromeの場合、次のようなショートカットを作成することで(そしてクリックするだけで)、さまざまなデスクトップにさまざまなWindowsを作成できます。
vdesk on:3 run:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" /new-window "https://superuser.com"
(上記はデスクトップ#3でsuperuser.comを実行します)