AutoHotKeyで、Windowsデスクトップガジェットを一時非表示にできるようにしてみた。
Windows7では自由に配置できるようになったデスクトップガジェットだが、操作の邪魔になる状況もちらほら。最前面にして常時表示しておきたいんだけど、それだとガジェットで隠れて操作できない――みたいな。
というわけで、マウスカーソルがデスクトップガジェットにホバーしている間だけ、デスクトップガジェットを非表示にするAHKスクリプト。――標準でついてるべき機能なんじゃねーの!?
;////////////////////////////////////////////////////////////////////////////////
;
; WindowsDesktopGadgetAvoid.ahk ver.1.1.0
;
;////////////////////////////////////////////////////////////////////////////////
CoordMode, Mouse, Screen
SetTimer, WGadgetCheck, 500
$#g::
SetTimer, WGadgetCheck, Off
SetTimer, WGadgetRestore, Off
GroupAdd, WGadget, ahk_class SideBar_HTMLHostWindow
WinShow, ahk_group WGadget
Send, #g
Sleep, 3000
Reload
return
WGadgetCheck:
if GetKeyState("Shift") || GetKeyState("Ctrl") || GetKeyState("Alt")
return MouseGetPos, mX, mY, mHWND
WinGetClass, mClass, ahk_id %mHWND%
if ("SideBar_HTMLHostWindow" == mClass) {
WG_Num := 1
Loop {
WinGet, WG_HWND, ID, ahk_class BasicWindow
if ("" == WG_HWND)
break
WinGetPos, wX, wY, wW, wH, ahk_id %WG_HWND%
if (0 < wW) && (0 < wH) {
GroupAdd, WGadget, ahk_id %WG_HWND%
WinHide, ahk_id %WG_HWND%
Win%WG_Num%X := wX, Win%WG_Num%Y := wY, Win%WG_Num%X2 := wX + wW, Win%WG_Num%Y2 := wY + wH
WG_Num++
}
}
SetTimer, WGadgetRestore, 2000
SetTimer, WGadgetCheck, Off
}
return
WGadgetRestore:
MouseGetPos, mX, mY
WG_Hover := 0
Loop, %WG_Num% {
wX := Win%A_Index%X
wX2 := Win%A_Index%X2
wY := Win%A_Index%Y
wY2 := Win%A_Index%Y2
if (wX <= mX) && (mX <= wX2) && (wY <= mY) && (mY <= wY2) {
WG_Hover := 1
break
}
}
if !WG_Hover {
WinShow, ahk_group WGadget
SetTimer, WGadgetCheck, 500
SetTimer, WGadgetRestore, Off
}
return
影のあるガジェット(標準の「時計」など)は影が残ったりするけど実用上問題ないので仕様。
よく見たらクラス名ついてたので対応。
修飾キーを押している間は非表示にしないように。
デスクトップガジェットをマウスで操作したい場合、タスクトレイからスクリプトを停止させるか、Win+Gで3秒ほど停止するのでその間に。
Win+Gってのは、ガジェットをアクティブにする標準のホットキーなので、「最前面にある必要はないけどたまに見たい」って人は活用すべし。たとえばMG2.ahkで、カーソルを画面端に移動させるとWin+G出すようにするなど。