8

Standby not Disabled!
When running 2 monitors on windows 7 or Windows XP, I would like to be able to put one of the monitors at a time into standby. The method can be manual.

When running 2 monitors , the second monitor is not always needed, shutting off the monitors own power switch will turn off the monitor, that does work Ok. Problems with that are , the delay with the monitor logo at turn on, and the power switch is not very accessable, and the switch might not live forever turning it on and off so many times.

Using disable methods like devcon, WIN-P and Display, causes all the windows to properly move to the other monitor. While that is what a person would want to happen so they can get hold of the windows, that is not what I want to happen, and some things on the other monitor have to be re-arranged after a re-enable. By putting it into standby mode, nothing changes other than the monitor going into standby.

Disconnecting the DVI cable still can cause the system to (properly) shift all the windows over to the one monitor, just like any of the disable methods do. That makes a mess of the windows, and is so unacceptable, that I would prefer to leave the monitor on, wasting power and the hardware, when it could easily go into standby for some time.

For both monitors I am using a "MonitorOff" program that puts both monitors into standby, but I can not find a utility that will put only ONE monitor into standby for the windows system.

If someone comes along and suggests "ultramon" you must know for a fact that it will put One of either of the monitors into actual standby. And it does not really suit me to use ultramon, I tested it (it was nice) and I did not feel that it was a program I wanted.

The 2 monitors are running off of an ATI 4890 card, they are both hooked up DVI-I, the OS is both Windows 7 (primary) and Windows XP.

In addition it would also be interesting to have seperate standby activity timers, and follow mouse kind of standby changes, but any manuel method , shortcut, batch , tray, or gadget kind of operation would be a good start.

Psycogeek
  • 9,139

3 Answers3

1

This probably isn't what you want, but a potential hackish solution is to hook your monitor up via a KVM switch and simply switch the video input to an inactive input. KVM switches tend to be designed for higher cycles than power switches, and if needed, you could always replace the switch assembly with one you know is rated for millions of cycles.

To the computer/Windows, it will be as if the monitor were turned off or unplugged. With no signal being received, the monitor should put itself in sleep mode.

Otherwise,find or write an ACPI tool that lets you manually send ACPI signals to devices. This might be a potential starting point.

1

I found a couple of answers to this Question (Turn off display in Windows on command) to be close to what I was thinking of.

The only issue with these is they don't describe how to automate this process, it gives you the ability to sleep a single monitor upon running a script as well as how to turn it back on, but it doesn't tell you how to make all of this happen on the events that you describe.

This site (Turn off LCD) talks about creating a program that makes use of System.Runtime.InteropServices I imagine that you could create a windows service that will sleep one of the monitors upon inactivity and then awaken it when there are mouse events.

If I were tasked with this I think that I could make it happen.

Challenge accepted

Malachi
  • 1,063
0

I also needed such a functionality for laptop battery conservation purposes. However, turns out this is a surprisingly difficult thing to achieve through conventional means. So, I resorted to autohotkey, which is capable of basically anything, it turns out.

The thread on autohotkey forums

The script that worked for me:

Process, Priority,, B
Gui,2:-Caption +ToolWindow +AlwaysOnTop
Gui,2:Color, 0

SetTimer, Check, 250 ; checks idle status every 250 ms (modify this)

Check: last := idle, idle := A_TimeIdlePhysical > 2000 ; 2000 ms idle time engages idle mode (selected so short for testing purposes) If (idle = last) Return If idle { AdjustScreenBrightness(-100) ; minumum brightness value for laptops (might change based on manufacturer and model etc) Gui,2:Show, Maximize ; blacks overlay over screen } Else { AdjustScreenBrightness(70) Gui,2:Hide ; removes black overlay } Return

AdjustScreenBrightness(step) { service := "winmgmts:{impersonationLevel=impersonate}!\.\root\WMI" monitors := ComObjGet(service).ExecQuery("SELECT * FROM WmiMonitorBrightness WHERE Active=TRUE") monMethods := ComObjGet(service).ExecQuery("SELECT * FROM wmiMonitorBrightNessMethods WHERE Active=TRUE") minBrightness := 0 ; level below this is identical to this

for i in monitors {
    curt := i.CurrentBrightness
    break
}
if (curt < minBrightness)  ; parenthesis is necessary here
    curt := minBrightness
toSet := curt + step
if (toSet > 100)
    return
if (toSet < minBrightness)
    toSet := minBrightness



for i in monMethods {
    i.WmiSetBrightness(1, toSet)
    break
}

}

The brightness function shown here only works for laptops, but it is possible to modify the display brightness of a desktop screen as well.

This is not an exact solution to the problem, however, I believe it gives a very strong starting point. I am posting it here because on different platforms I have seen people complaining that their laptop's display standby mode does not work as desired. This is works satisfactorily in my opinion.