Jump to content
Sign in to follow this  
AuScripter

Script execution stops when monitor is turned off by script

Recommended Posts

AuScripter

Hi,

I'm trying to create a script that runs in the background while turning off the monitor. Unfortunately, the script execution stops when the monitor is off. I wish, however, that the script will continue.

This is an example of my implementation:

 

#include <File.au3>

Global Const $lciWM_SYSCommand = 274
Global Const $lciSC_MonitorPower = 61808
Global Const $lciPower_Off = 2
Global Const $lciPower_On = -1

Global $LogFileName = @ScriptDir & "\MonitorOffTest.log"
HotKeySet("^q", "QuitScript")

WriteLog("Start script")
Sleep(5000)
_Monitor(0)
WriteLog("Monitor off")

$Run = True
While $Run
    WriteLog("Main loop")
    Sleep(5000)
WEnd

Func WriteLog($logtext)
    Local $hFile = FileOpen($LogFileName, 1)
    _FileWriteLog($hFile, $logtext)
    FileClose($hFile)
EndFunc

Func _Monitor($run = 1)
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

    If $run = 0 Then
        ; BlockInput(1)
        DllCall('user32.dll', 'int', 'SendMessage', _
                'hwnd', $Progman_hwnd, _
                'int', $lciWM_SYSCommand, _
                'int', $lciSC_MonitorPower, _
                'int', $lciPower_Off)
        Return 1
    ElseIf $run = 1 Then
        ; BlockInput(0)
        DllCall('user32.dll', 'int', 'SendMessage', _
                'hwnd', $Progman_hwnd, _
                'int', $lciWM_SYSCommand, _
                'int', $lciSC_MonitorPower, _
                'int', $lciPower_On)
        Return 1
    EndIf
    Return 0
EndFunc

Func QuitScript()
    WriteLog("Quit script")
    $Run = False
EndFunc

 

It creates log entries as follows:

2019-01-11 14:00:58 : Start script
2019-01-11 14:01:03 : Monitor off
2019-01-11 14:01:03 : Main loop
2019-01-11 14:06:24 : Main loop
2019-01-11 14:06:29 : Main loop
2019-01-11 14:06:32 : Quit script

As you can see, nothing is logged when the monitor is off. After moving the mouse, it is running again.

Who has a hint for me how to make sure that the monitor is off, but the script and all other processes on the computer are still running?

Btw: The computer I'm testing with is a Surface 3

Share this post


Link to post
Share on other sites
JLogan3o13

Obvious question, why do you need to turn the monitor off in order to run your script?

===In case you missed it, this is a Mod stepping into a thread===


√-1 2^3 ∑ π, and it was delicious!

How to get your question answered on this forum!

Share this post


Link to post
Share on other sites
AuScripter

The idea is to turn the monitor off when the script is idle (main loop). The plan is to activate the monitor only during the activities. Unfortunately, the script stops and misses the time of the next activity.

Share this post


Link to post
Share on other sites
Danp2

Have you tried commenting out the Sleep command? Perhaps there is an incompatibility with the way it is implemented and your monitor off functionality.

Share this post


Link to post
Share on other sites
AuScripter

Which Sleep command do you mean? The one within the main loop? No, I didn't try this. Would not that result in too much load on the System?

Share this post


Link to post
Share on other sites
Danp2

Yes, the one inside the main loop. Don't worry about system load at this point. The idea is to identify the reason the script is pausing. If it turns out to be the Sleep command, you would need to replace it with something else.

Share this post


Link to post
Share on other sites
AuScripter

Strange! The script seems to continue without Sleep. I would not have gotten that idea at all. But what can I use as an alternative? The original script does a lot more in the main loop and Sleep is used in different places.

Share this post


Link to post
Share on other sites
AuScripter

Tried it. The same result:

2019-01-11 15:51:57 : Start script
2019-01-11 15:52:02 : Monitor off
2019-01-11 15:52:02 : Main loop
2019-01-11 15:52:07 : Main loop
2019-01-11 15:52:12 : Main loop
2019-01-11 15:55:33 : Main loop
2019-01-11 15:55:38 : Main loop
2019-01-11 15:55:43 : Main loop
2019-01-11 15:55:48 : Main loop
2019-01-11 15:55:53 : Main loop
2019-01-11 15:55:58 : Main loop
2019-01-11 15:56:03 : Main loop
2019-01-11 15:56:08 : Quit script

The loop stops after three passes (red) and will not resume until the computer is re-activated with the mouse (green).

Share this post


Link to post
Share on other sites
Danp2

What are your power management settings? Is it possible that the computer is entering a "suspended" state after you send the command to shut off the monitor?

Share this post


Link to post
Share on other sites
AuScripter

No. For mains operation all options are set to "Never"

Share this post


Link to post
Share on other sites
AuScripter

An alternative idea: Maybe I could also set the screen brightness to 0. Is that possible with Autoit? With Windows on-board means this does not work with the surface under Windows 10. Minimum brightness setting here is 25%.

Share this post


Link to post
Share on other sites
AuScripter

In the meantime, I have read that it is probably a phenomenon of Windows tablets. So I searched in the wrong place. Not AutoIT is the problem, but the hardware.

Share this post


Link to post
Share on other sites
Earthshine

There may be a setting in windows to allow applications to run in the background when they don’t have focus


My resources are limited. You must ask the right questions

 

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×