; ; MonitorDimmer ; By mmdoogie ; Version 2 ; 23 January 2008 ; ; Overlays a partially-transparent, black, always on top window over my second monitor ; Window is event-transparent, so events are passed to windows below ; Win Numpad+ makes the overlay lighter ; Win Numpad- makes the overlay darker ; Win Numpad* toggles the overlay ; Don't want several of these running #SingleInstance force ; Read in values from the INI file IniRead, transAmount, MonitorDimmer.ini, misc, TransparencyAmount, 128 IniRead, show, MonitorDimmer.ini, misc, Activated, 1 IniRead, startMonitor, MonitorDimmer.ini, span, StartMonitor, 2 IniRead, stopMonitor, MonitorDimmer.ini, span, StopMonitor, 2 ; Add Menu Items Menu, Tray, NoStandard Menu, Tray, Add, Toggle, Toggle Menu, Tray, Add, Darken, Darken Menu, Tray, Add, Lighten, Lighten Menu, Tray, Add Menu, Tray, Add, Set Start Monitor (Curr: %startMonitor%), SetStartMonitor Menu, Tray, Add, Set Stop Monitor (Curr: %stopMonitor%), SetStopMonitor Menu, Tray, Add Menu, Tray, Add, Exit, FinishIt ; Get Monitor Count SysGet, monCount, MonitorCount ; Turn on the window ; E0x20 corresponds to WS_EX_TRANSPARENT which makes the window event-transparent Gui, +AlwaysOnTop -SysMenu +Owner -Caption +E0x20 Gui, Color, 000000 GoSub UpdateLocation GoSub UpdateTrans If (show = 0) { show := 1 GoSub Toggle } ; Init Complete Return ; Get a new monitor number and update things if its valid SetStartMonitor: InputBox, startMonitorTemp,, First monitor number to dim (1-%monCount%),,,,,,,, %startMonitor% If ((startMonitorTemp > 0) And (startMonitorTemp <= monCount)) { startMonitor := startMonitorTemp Menu, Tray, Rename, %A_ThisMenuItem%, Set Start Monitor (Curr: %startMonitor%) GoSub UpdateLocation } Return ; Get a new monitor number and update things if its valid SetStopMonitor: InputBox, stopMonitorTemp,, Last monitor number to dim (1-%monCount%),,,,,,,, %stopMonitor% If ((stopMonitorTemp > 0) And (stopMonitorTemp <= monCount)) { stopMonitor := stopMonitorTemp Menu, Tray, Rename, %A_ThisMenuItem%, Set Stop Monitor (Curr: %startMonitor%) GoSub UpdateLocation } Return ; Increment the transparency amount #NumpadAdd:: Lighten: transAmount := transAmount + 8 If (transAmount > 255) { transAmount := 255 } GoSub UpdateTrans Return ; Decrement the transparency amount #NumpadSub:: Darken: transAmount := transAmount - 8 If (transAmount < 0) { transAmount := 0 } GoSub UpdateTrans Return ; Update the window transparency amount from the variable UpdateTrans: IniWrite, %transAmount%, MonitorDimmer.ini, misc, TransparencyAmount WinSet, Transparent, %transAmount%, Overlay MRM Return ; Update the window location and write new locations to INI UpdateLocation: IniWrite, %startMonitor%, MonitorDimmer.ini, span, StartMonitor IniWrite, %stopMonitor%, MonitorDimmer.ini, span, StopMonitor SysGet, StartMon, Monitor, %startMonitor% SysGet, StopMon, Monitor, %stopMonitor% overlayX := StartMonLeft overlayY := StartMonTop overlayWidth := StopMonRight - StartMonLeft overlayHeight := StartMonBottom - StartMonTop Gui, Show, NoActivate x%overlayX% y%overlayY% w%overlayWidth% h%overlayHeight%, Overlay MRM Return ; Toggle the overlay on or off ; Comes back to whatever level it was at before toggle #NumpadMult:: Toggle: If (show = 1) { Gui, Show, Hide, Overlay MRM show := 0 } Else { Gui, Show, Overlay MRM GoSub UpdateTrans show := 1 } Return ; Get outta here FinishIt: IniWrite, %show%, MonitorDimmer.ini, misc, Activated ExitApp