Page 1 sur 1

[Ex] Extinction écran

Posté : ven. 28 mars 2008 21:46
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]

Re: [Ex] Extinction écran

Posté : sam. 29 mars 2008 06:08
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 =Þ

Re: [Ex] Extinction écran

Posté : dim. 06 avr. 2008 23:40
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 ;)

Re: [Ex] Extinction écran

Posté : lun. 07 avr. 2008 08:21
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

Re: [Ex] Extinction écran

Posté : lun. 07 avr. 2008 15:01
par ani
regarde l'exemple proposé par mscreator posté le 19 novembre 2007

monitor OFF/ON

Re: [Ex] Extinction écran

Posté : lun. 07 avr. 2008 15:54
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 ! ;)

Re: [Ex] Extinction écran

Posté : lun. 07 avr. 2008 17:47
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. :(

Re: [Ex] Extinction écran

Posté : lun. 07 avr. 2008 22:55
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 :)

Re: [Ex] Extinction écran

Posté : mar. 08 avr. 2008 02:58
par ani
vaut mieux prendre la dernière version, plus complète et c'est top top, croit le novice qui sommeil en moi :)

Re: [Ex] Extinction écran

Posté : mar. 08 avr. 2008 08:55
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 ;)

Re: [Ex] Extinction écran

Posté : mar. 08 avr. 2008 12:21
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 ... ;)

Re: [Ex] Extinction écran

Posté : mar. 29 juil. 2008 20:14
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...

Re: [Ex] Extinction écran

Posté : mer. 30 juil. 2008 09:31
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 ^^'

Re: [Ex] Extinction écran

Posté : lun. 22 sept. 2008 18:49
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.