[Ex] Extinction écran

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
MClaveau
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 28
Enregistré le : ven. 08 févr. 2008 22:11
Status : Hors ligne

[Ex] Extinction écran

#1

Message par MClaveau »

Eteindre l'écran pendant 10 secondes.

Code : Tout sélectionner

Opt("WinTitleMatchMode", 4)
$hwnd = WinGetHandle('classname=Progman')
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
sleep(10000)
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
[/color]
Modifié en dernier par Tlem le sam. 13 déc. 2008 11:39, modifié 3 fois.
Raison : Ajout de la balise [Ex] dans le titre.
@-salutations (pas de messages perso ; merci)
--

Michel Claveau
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [Ex] Extinction écran

#2

Message par arrkhan »

^^ sympa a inclure à inclure au script pseudo-malveillant de l'ancien fofo http://autoit-fr.realbb.net/scripts-f6/ ... es-t46.htm sinon je voit pas ....

MClaveau = Docteur es script tordus =Þ
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [Ex] Extinction écran

#3

Message par SurPriseS »

Bonsoir !

Je cherchais depuis un moment un moyen d'éteindre mon écran a distance, c'est quasiment chose faite grâce a vous !!!

J'ai donc fait une petite modif de votre script que voici :

Code : Tout sélectionner

HotKeySet("{ENTER}","load")
Opt("WinTitleMatchMode", 4)
$hwnd = WinGetHandle('classname=Progman')


    While 1
        sleep(100000)
    WEnd


func load()
;   msgbox(0,"","load")
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
    HotKeySet("{ENTER}","unload")
endfunc


func unload()
    sleep(500)
;   msgbox(0,"","unload")
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
    HotKeySet("{ENTER}","load")
endfunc
 

Donc normalement l'écran s'éteint avec l'appuie sur la touche entrée et se ralume via la même touche, mais sa ne fonctionne pas chez moi... d'ailleurs même votre script ne fonctionne pas correctement...
En gros l'écran se coupe bien mais se rallume relativement vite, j'ai essayer en mettant un sleep de 50000 a la place des 5000 de base, ben quand l'écran se ralume le script n'est pas encore finit...
Dans le cas de ma modif, c'est différent le script fonctionne bien au niveau du HotKeySet (j'ai laisser les msgbox pour mes test) mais par contre même symptôme... impossible de laisser l'écran éteint... si vous avez une idée d'où cela peut venir... (logiciel en tache de fond ....)


Merci ;)
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [Ex] Extinction écran

#4

Message par arrkhan »

Plop,

Test en local, je n'ai pas moyen de tester a distance, ce script fonctionne chez moi, pas de unload(), l'ecran se reveille par n'importe quel appui de touche, et {ENTER} n'est pas pratique pour un script qui tourne en permanance sur l ordi...

Code : Tout sélectionner

HotKeySet("{F4}", "load")
Opt("WinTitleMatchMode", 4)
$hwnd = WinGetHandle('classname=Progman')

While 1
    Sleep(10)
WEnd

Func load()
    Sleep(500)
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
EndFunc   ;==>load
Je pense que le rajout du sleep(500) y est pour quelque chose, pour eviter que le up du F4 ne soit considerer comme une action de l utilisateur

sinon, je pense que tu peux tenter ca

Code : Tout sélectionner

HotKeySet("{F4}", "load")
HotKeySet("{F3}", "unload")
Opt("WinTitleMatchMode", 4)
$hwnd = WinGetHandle('classname=Progman')

While 1
    Sleep(10)
WEnd

Func load()
    Sleep(500)
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
EndFunc   ;==>load

Func unload()
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
EndFunc   ;==>unload
 
Edit: rajout du second code
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Extinction écran

#5

Message par ani »

regarde l'exemple proposé par mscreator posté le 19 novembre 2007

monitor OFF/ON
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [Ex] Extinction écran

#6

Message par SurPriseS »

Je sais bien pour entrée ;) mais c'est pour évité que j'oublie de laisser le script en route quand je fait des test :p

Pour le reste je vais regardé sa merci ! ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Extinction écran

#7

Message par Tlem »

Le problème de la commande :

Code : Tout sélectionner

DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
c'est que c'est comme une mise en veille.
Donc l'appui d'une touche ou le mouvement de la souris vont 'réveiller' l'affichage.
J'ai bien tester des choses à coup de BlockInput() et consort, mais on fini par être bloquer complètement !!!

La solution que j'ai trouvé, c'est d'afficher une GUI noire, et de bloquer et masquer la souris etc ...

Code : Tout sélectionner

#include <GUIConstants.au3>
#Include <WinAPI.au3>

HotKeySet("{ESC}", "Quit")
HotKeySet("!{Tab}", "Nothing")

GuiCreate("",@DesktopWidth, @DesktopHeight, "", "", $WS_POPUP)
GUISetBkColor (0x000000)
GUISetState()

_WinAPI_ShowCursor(0)
Run("taskmgr.exe", "", @SW_DISABLE)

While 1
    Sleep(200)
WEnd

Func Quit()
    Exit
EndFunc

Func Nothing()
EndFunc
Par contre, la touche Win n'est pas bloquée et donc sont appui fait apparaitre la barre des taches. :(
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [Ex] Extinction écran

#8

Message par SurPriseS »

Hum c'étais bien sa ani ;) le Sleep(500) qui manquais ;)

Par contre Tlem j'ai pas le winapi.au3 c'est dans le nouveau autoit ? (j'ai qu'une vieille version sur se pc vu qu'il a pas l'adsl...) ou c'est un au3 a part ?

maintenant pour l'utilisation que j'en ai, sa devrais suffire ;) je vais voir se qu'on peut faire :)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Extinction écran

#9

Message par ani »

vaut mieux prendre la dernière version, plus complète et c'est top top, croit le novice qui sommeil en moi :)
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [Ex] Extinction écran

#10

Message par SurPriseS »

Je sais bien mas vu que j'ai pas l'adsl sur se pc ben... les MAJ je les fait sur mon pc portable ;)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Extinction écran

#11

Message par ani »

Pour ceux qui aurait déjà Lu l'aide d'autoit version 3.2.10.0, vous trouverez un exemple d'extinction d'écran .... Fonction _SendMessage :o , j'indique l'exemple pour ceux qui ne dispose pas de cette version.

Code : Tout sélectionner

#include <misc.au3>

_Main()

Func _Main()
    Local Const $Off = 2, $On = -1

    Opt("WinTitleMatchMode", 4)
    $hwnd = WinGetHandle('classname=Progman')
    _ToggleMonitor($hWnd, $Off)
    Sleep ( 3000 )
    _ToggleMonitor($hWnd, $On)
EndFunc

Func _ToggleMonitor($hwnd, $OnOff)
    Local Const $WM_SYSCOMMAND = 274
    Local Const $SC_MONITORPOWER = 61808
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_MONITORPOWER, $OnOff)
    If @error Then
        MsgBox(0,"_ToggleMonitor", "_SendMessage Error: " & @error)
        Exit
    EndIf
EndFunc
Alors pour ma part, j'ai fait un test fort concluant :)
en se basant sur le handle broadcast plus simple :) y a d'autre handle utilisable mais je vous laisse chercher :p
Le code ci-dessous est à vos risque et péril, nous somme pas responsable...je parle pour moi ^__^

Code : Tout sélectionner

Global Const $WM_SYSCOMMAND = 0x0112

SendMessageMonitor() ; par défaut
beep(800,400)
sleep(5000)
SendMessageMonitor(1)

Func SendMessageMonitor($iMode=0) ;mode OFF
    Local Const $MONITOR_ON = -1
    Local Const $MONITOR_STANDBY = 1
    Local Const $MONITOR_OFF = 2
    Local Const $SC_MONITORPOWER = 0xF170
    Local Const $HWND_BROADCAST = 0xffff

    Local $LParam, $aResult
    
    Switch $iMode
        Case 0
            $LParam = $MONITOR_OFF
        Case 1
            $LParam = $MONITOR_ON
        Case 2
            $LParam = $MONITOR_STANDBY
    EndSwitch

    $aResult = DllCall('user32.dll', 'int', 'SendMessage', _
                       'hwnd', $HWND_BROADCAST, _
                       'int', $WM_SYSCOMMAND, _
                       'int', $SC_MONITORPOWER, 'int', $LParam)
    Return $aResult[0]
EndFunc
 
La fonction _SendMessage() existe déjà, dans l'include misc.au3 , mais bon ani c'est pas un malin ^:p , alors je vous l'ai modifié pour la peine ;)

On peut aussi le faire avec les fonctions suivantes PostMessage,PostThreadMessage,SendNotifyMessage,SendMessageCallback..

N'oublié pas microsoft est notre bible, pendant un certain temp après, on deviend semi codeur ¨__¨

bon codage à tous

Le titre devrait être changé? ok j'ai rien dit :)
Alors pourquoi le blockinput ne fonctionne pas ?

La fonction SendMessageMonitor est en partie une fonction utilisé par l'économiseur d'écran, dans cette fonction le faite de bouger la souris ou toucher au clavier réveil l'état, alors le blockinput on oublie ;)

voilà,voilà pour ce qui on de mauvaise intention, je vous ai lu ... ;)
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [Ex] Extinction écran

#12

Message par Yoyo86220 »

Voici encore plus simple ;p

Code : Tout sélectionner

HotKeySet("{ENTER}", "Etiendre")

While 1
    Sleep(1)
Wend

func Etiendre()
    While (HotKeySet("{ENTER}", "Allumer"))
        Opt("WinTitleMatchMode", 4)
        $hwnd = WinGetHandle('classname=Progman')
        DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
    WEnd
EndFunc

func Allumer()
    While (HotKeySet("{ENTER}", "Etiendre"))
        Opt("WinTitleMatchMode", 4)
        $hwnd = WinGetHandle('classname=Progman')
        DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
    WEnd
EndFunc
PS : dsl pour le vieu topic...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Extinction écran

#13

Message par ani »

faut pas être désolé yoyo86220, faut assumer :D

Le bout de script pourrait être optimiser (je testerai tantôt) ;)
je suis au cyber ^^'
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Extinction écran

#14

Message par timmalos »

Je deterre un peu, mais bon:
Trouvé sur le forum anglais, ce code permet de resoudre le probleme pour ceux dont l'ecran se rallume au bout de quelques secondes:

Code : Tout sélectionner

#NoTrayIcon

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("{Esc}", "_Quit")

MsgBox(64, "Monitor On/Off", "Press F11 to turn off the monitor." & @LF & _
                            "Press F10 to turn on the monitor back." & @LF & _
                            "Press ESC to turn on the monitor and exit program.")

While 1
    Sleep(10)
WEnd

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

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)
        _IdleWaitCommit(0)
        Sleep(20)
    WEnd
EndFunc

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

Func _Quit()
    _Monitor_ON()
    Exit
EndFunc
 
La nouveauté est la fonction _IdleWaitCommit qui permet de laisser l'ecran eteint même si la souris ou le clavier bouge.
Répondre