https://www.npb.go.jp/ja/n_banknote
💴 🤩
少し修正したので貼っておこー
#SingleInstance force
#WinActivateForce
; define
DATA_FILE := "デスクトップの表示.dat"
DESKTOP_CLASS := "ahk_class Progman"
POPUP1_CLASS := "XamlExplorerHostIslandWindow_WASDK"
POPUP2_CLASS := "WorkerW"
; ----------------------------------------
; helper function
; ----------------------------------------
getString(hwndList) {
ret := ""
for index, value in hwndList
ret .= "|" . value
return LTrim(ret, "|")
}
restoreWindow(hwndList, statusList) {
for index, value in hwndList {
reverseIndex := hwndList.Length - index + 1
hwnd := Integer(hwndList[reverseIndex])
if WinExist(hwnd)
if (statusList[reverseIndex] != -1) ; skip minimize window
WinActivate(hwnd)
}
}
; ----------------------------------------
; duplicate run
; ----------------------------------------
if FileExist(DATA_FILE) {
; read data file
FileObj := FileOpen(DATA_FILE, "r")
hwndString := FileObj.ReadLine()
hwnd := StrSplit(hwndString, "|")
statusString := FileObj.ReadLine()
status := StrSplit(statusString, "|")
; restore window
restoreWindow(hwnd, status)
; delete data file
FileDelete(DATA_FILE)
; exit
ExitApp
}
; ----------------------------------------
; main process
; ----------------------------------------
; get window handles for restore
hwnd := WinGetList()
; get window status
status := []
for index, value in hwnd
status.Push(WinGetMinMax(value))
; creat data file
FileAppend(getString(hwnd), DATA_FILE)
FileAppend("`n", DATA_FILE)
FileAppend(getString(status), DATA_FILE)
FileAppend("`n", DATA_FILE)
; show desktop and focus
Send "#d"
Sleep 1000
hwndDesktop := WinGetID(DESKTOP_CLASS)
ControlFocus(hwndDesktop)
; get window handles for monitoring
hwnd1 := WinGetList()
; wait new window
WinWaitNotActive WinExist("A")
Loop {
Sleep 500
hwnd2 := WinGetList()
try {
className := WinGetClass("A")
if ((className != POPUP1_CLASS) && (className != POPUP2_CLASS))
if getString(hwnd1) != getString(hwnd2)
break
} catch {
} finally {
activeId := WinExist("A")
hwnd2 := WinGetList()
}
}
; restore window
restoreWindow(hwnd, status)
; active new window
try {
WinActivate(activeId)
} catch {
WinActivate(hwnd2[1])
}
; delete data file
if FileExist(DATA_FILE)
FileDelete(DATA_FILE)
以下の2ファイルを差し替えてください。
C:\tool\desktop
├─デスクトップの表示.ahk
└─デスクトップの表示.exe
ショートカットファイルの再作成は不要です。
タスクバーの最左端にショートカットファイルを配置し、「Win」+「1」キーで実行する使用方法を想定しています。「Win」+「Tab」、「Alt」+「Tab」などと共に使用してください。
たまに動作おかしいのでまたバグ修正するかもしれません。
いじわるテストするとすぐに不具合が発生する。
プロセスの一覧に変更があったことを検知して画面の復元を開始しているが、デスクトップを表示して1秒未満でアプリを実行されると画面の復元が開始できない。Autohotkeyで正しくプロセスの一覧が取得できるようになるまでタイムラグがあり1秒待ちを外すとプロセスを正しく監視できない。
また、起動されるアプリについても多様なアプリが存在していてプロセスの一覧が変わったからといって画面を復元するためのウインドハンドルが取得できるわけではないため、ここでも待ち時間が必要となり動きとしては復元開始までにタイムラグが発生してしまっている。動きがもっさりして気持ち悪いが、仕方ないかと。
デスクトップを表示した後、以下のようなアプリや操作ではプロセスの状態が正しく取得できず画面が復元されない場合がある。
二重起動したら画面を復元するようにしたので画面の配置を壊して終わることはなくなったが、正しく動かないケースが多々あると思われる。
自分でソースを修正するような人は、そもそもこんなツールは使わないのかもしれないけれど、個々の環境で待ち時間のチューニングなどが必要かもしれないのでコンパイル方法を記載しておきます。
2. 「Compile」を選択する。
初回の選択時にコンパラがインストールされます。
3. 「Compile」を起動し、「Base File」を選択を「Sava」ボタンをクリックします。
4. 「デスクトップの表示.ahk」ファイルを右クリックし、「Compile script(GUI)」を選択します。
C:\tool\desktop
├─デスクトップの表示.ahk
└─デスクトップの表示.exe
5. 「Convert」ボタンをクリックします。
→「デスクトップの表示.exe」が生成されます。
コンパイル方法を書いておけば怪しげなEXEファイルを添付する必要がないかもしれない。これを貼っておこー
「デスクトップの表示.ahk」を直接実行できるが、「デスクトップの表示.ahk」をタスクバーにピン止めするとアイコンが変更できない。アイコンを変更するためにはEXEファイルのショートカットである方が都合が良いとの理由でEXEを添付したのだけど、怪しげな野良EXEセキュリティ的には実行したくはないよな。
環境によっては、「C:\tool\desktop」フォルダに対して除外の設定が必要かもしれない。
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト