Jump to content

Monitor On/Off Example


Recommended Posts

Hi everybody

How can I Modify this script in order to "Monitor_ON" if Mouse Moves when my monitor is in "Monitor_OFF"

Thanks for responding

Potit Panda

make a new function then call this:

Global $io_control = "off"

Func Monitor($io_control = "on")
    Opt("WinTitleMatchMode", 4)
    Local $WM_SYSCommand = 274
    Local $SC_MonitorPower = 61808
    Local $HWND = WinGetHandle("classname=Progman")
    Switch StringUpper($io_control)
        Case "OFF"
            DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, "int", $SC_MonitorPower, "int", 2)
        Case "ON"
            DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, "int", $SC_MonitorPower, "int", -1)
        Case Else
            MsgBox(32, @ScriptName, "Command usage: on/off")

i found it off this: http://www.autoitscript.com/forum/index....owtopic=87625&st=0&p=629136&#entry629136

Edited by Golbez
Link to comment
Share on other sites

  • 1 year later...
  • 1 year later...
  • 2 months later...

Update December 4 2013


Fixed inability to open settings second time.

Added 500 milisecons delay for monitor off to compensate for mouse moviment.

Parented some pop up messages.

Replaced tray menu with custom Exit and About items.

Fixed blank values for coordinates. Not saved unless you click Save, but will always show 0 if nothing else was previously set.

I made one for my laptop touchscreen using this example.

Works lovely.

It has options to change things so give it a try.

You can select what ever buttons to display. Monitor off,Restart or ShutDown.

Set visibility of buttons.

Enable Start with Windows.


Hope anybody likes this.


Source files Source.zip

Executable Laptop Monitor OFF.zip



Edited by tonycst
Link to comment
Share on other sites

  • 1 year later...

Hi MrCreatoR, first let me say I love your original script, it does wonders for me. I'm trying to push it a little bit further and I'm running into a wall... My goal is to have an automated script to open and close the monitor at set times. ie open at 7:00AM and close at 22:00. It's for info screens in a bank and we want to shut them down at night so they'll last longer.

So far, my script is built around yours, and it does the OFF part perfectly but the ON part doesn't work automatically. Weirdly enough, If I hit F10 manually it comes up fine. Would you have any idea where I erred on the ON part ? Any helpfull comments will be appreciated !

; AutoIt Screen Control
; Created: 2015/04/15 - Schyzo

#include <AVIConstants.au3>
#include <WinAPISys.au3>
#include <GuiConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <MsgBoxConstants.au3>
#include <Date.au3>
#include <Debug.au3>
HotKeySet("{F11}", "_Monitor_OFF")
HotKeySet("{F10}", "_Monitor_ON")
HotKeySet("{F9}", "_Quit")
Global $iStart, $iExit, $iHour, $iMin, $iSec, $TimeOff, $gTimeOffHour, $TimeOn, $TimeOff, $TimeOffHour, $gTimeOffMin, $TimeOffMin, $TimeOff, $gTimeOnHour, $TimeOnHour, $gTimeOnMin, $TimeOnMin, $TimeOnMin, $gLoopTime, $LoopTime

GUICreate("Screen Control", 250, 250)

; Stop time
GUICtrlCreateLabel("Heure d'arrêt du moniteur (24h)", 10, 20, 300, 20)
$gTimeOffHour = GUICtrlCreateInput("22", 10, 40, 40, 20)
$gTimeOffMin = GUICtrlCreateInput("00", 60, 40, 40, 20)
; Start time
GUICtrlCreateLabel("Heure de départ du moniteur (24h)", 10, 70, 300, 20)
$gTimeOnHour = GUICtrlCreateInput("08", 10, 90, 40, 20)
$gTimeOnMin = GUICtrlCreateInput("40", 60, 90, 40, 20)
GUICtrlCreateLabel("Temps de pause (secondes)", 10, 120, 300, 20)
$gLoopTime = GUICtrlCreateInput("5", 10, 140, 40, 20)

$iStart = GUICtrlCreateButton("Start", 10, 180, 100, 30)
$iExit = GUICtrlCreateButton("Exit", 130, 180, 100, 30)

ControlClick("Screen Control", "", "Start") ; Auto start process after 5 secs
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
        Case $iStart
            ;MsgBox($MB_SYSTEMMODAL, "", "Start clicked.")
            ;Global $TimeOff = _TimeToTicks($TimeOffHour, $TimeOffMin, 0)
            $TimeOffHour = GUICtrlRead($gTimeOffHour) ; return time OFF hour
            $TimeOffMin = GUICtrlRead($gTimeOffMin) ; return time OFF min
            $TimeOnHour = GUICtrlRead($gTimeOnHour) ; return time ON hour
            $TimeOnMin = GUICtrlRead($gTimeOnMin) ; return time ON min
            $LoopTime = GUICtrlRead($gLoopTime) ; return Loop Time
            $LoopTime = $LoopTime * 1000
        Case $iExit
            ;MsgBox($MB_SYSTEMMODAL, "", "Exit clicked.")

; ***  Start Process ***
Func _StartScreen()
    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1
    Global $MonitorIsOff = False

    HotKeySet("{F11}", "_Monitor_OFF")
    HotKeySet("{F10}", "_Monitor_ON")
    HotKeySet("{F9}", "_Quit")
    MsgBox(64, "Monitor On/Off", "Press F11 to turn off the monitor." & @LF & _
            "Press F10 to turn on the monitor back." & @LF & _
            "Press F9 to turn on the monitor and exit program.", 2)
    While 1
        _CheckTime() ; Go check current time vs ON and OFF time
EndFunc   ;==>_StartScreen

; ***  Lecture de l'heure de départ et d'arrêt ***
Func _IniTime()
    ; calculate with time
    $TimeOff = _TimeToTicks($TimeOffHour, $TimeOffMin, 0)
    $TimeOn = _TimeToTicks($TimeOnHour, $TimeOnMin, 0)
EndFunc   ;==>_IniTime

; ***  vérification de l'heure courante et ouvrir et fermer l'écran au besoin ***
Func _CheckTime()
    Local $iStartTicks = _TimeToTicks(@HOUR, @MIN, @SEC)
    ;MsgBox($MB_SYSTEMMODAL, "StartTicks", $iStartTicks,2)
    Local $sMsg = ""
    Switch $iStartTicks
        Case 0 To $TimeOn
            ;$sMsg = "0 to ON = OFF"
        Case $TimeOn To $TimeOff
            ;$sMsg = $MonitorIsOff & "ON to OFF = ON  "
        Case $TimeOff To 86340000  ; TimeOFF to 23:59:00 in ticks
            ;$sMsg = "OFF to 24 - OFF"
        Case Else
            $sMsg = "What are you still doing up?"
    ;MsgBox($MB_SYSTEMMODAL, "", $sMsg, 2)
EndFunc   ;==>_CheckTime

Func _Monitor_ON()
    $MonitorIsOff = False
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
    DllCall('user32.dll', 'int', 'SendMessage', _
            'hwnd', $Progman_hwnd, _
            'int', $lciWM_SYSCommand, _
            'int', $lciSC_MonitorPower, _
            'int', $lciPower_On)
EndFunc   ;==>_Monitor_ON

Func _Monitor_OFF()
    $MonitorIsOff = True
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
    While $MonitorIsOff = True
        DllCall('user32.dll', 'int', 'SendMessage', _
                'hwnd', $Progman_hwnd, _
                'int', $lciWM_SYSCommand, _
                'int', $lciSC_MonitorPower, _
                'int', $lciPower_Off)
EndFunc   ;==>_Monitor_OFF

Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate("uint;dword")
    DllStructSetData($LastInputInfo, 1, DllStructGetSize($LastInputInfo))
    DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
        $iSave = DllStructGetData($LastInputInfo, 2)
        DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
    Until (DllStructGetData($LastInputInfo, 2) - $iSave) > $idlesec Or $MonitorIsOff = False
    Return DllStructGetData($LastInputInfo, 2) - $iSave
EndFunc   ;==>_IdleWaitCommit

Func _Quit()
EndFunc   ;==>_Quit
Link to comment
Share on other sites

  • 3 months later...
  • 1 year later...
On 4/9/2008 at 6:21 AM, mdixon said:


I'm using AutoIt v3.2 on an XP SP2 laptop (ASUS A6T).


I've tried with other hotkeys, and that's not the problem. The same behaviour occurs.


I will describe exactly what happens.


I start the script. The message box pops up. Yay, all good so far.

I close the message box. Windows runs as per usual.

I press F11, the screen goes blank.

About a second later, the screen turns back on.

I press a key, the screen goes blank, and about a second later, it turns back on.

I move the mouse, the screen goes blank, and about a second later, it turns back on.

If I continually move the mouse, the screen goes black, but flickers every second or so, as if it's trying to turn on but is turned off again immediately.

If I press F10, the screen turns on or stays on.

If I press esc, the script exits.


I think this must be a hardware issue of some sort. But I can't see what's causing it.

Try changing the Sleep to a smaller number-- Also I added VOLUME MUTE, and changed my hotkeys.


Link to comment
Share on other sites

  • 5 months later...

Hi guys, sorry to necro this thread. But I'm in need for one of the codes on page one to work for me. 

The monitor off for three seconds and on again. Two or even one second preferred.

I tried copying the code, but I get the following (attached) error when running.

I  have a pc at work that will display a static image all day (jobs list for the team) and wish for the screen to 'power cycle' every hour so so to avoid damage.

is the code just out of date for win 10?


Thanks in advance for your assistance,



Code error.JPG

Link to comment
Share on other sites

  • 3 years later...


If posssible. I need help

I have

1) run the script
2) the monitor went off
3) push the mouse or press the buttons on the mouse-the monitor does NOT turn on
4) if you press any button on the keyboard-the monitor turned on + the mouse became working - both on moving the mouse, and on the mouse you press the buttons
5) if the script does not finish in the tray, if you do not click the Exit button on the script or Finish the script in the tray, the script starts working again after 1 minute

Thank You!

Edited by SharkyEXE
Link to comment
Share on other sites

  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...