Page 1 sur 1
Problème bizarre avec PixelGetColor...
Posté : lun. 08 mai 2017 10:39
par Utilisateur 3309 supprimé
bonjour,
je viens de faire évoluer mon petit logiciel qui affiche les infos "cachées" des livebox 3 et 4 d'Orange.
http://liveboxinfo.tk/
Dans les version 1.x j'étais en full Autoit, maintenant afin d'améliorer l'aspect visuel je suis passé en html5/css3 avec Bootstrap/jquery pour l'interface, et autoit pour la programmation. je me suis inspiré de
ce script pour déterminer qu'on a appuyé sur un bouton de l'interface web (changement de couleur du bouton = on a appuyé dessus).
J'ai posté mon appli sur le forum orange :
http://www.forum-orange.com/viewtopic.p ... 29#p763429
mais visiblement cela ne marche pas pour tout le monde...et je ne comprends pas de quoi cela vient. Chez moi sur 2 PC, avec windows 10 ca marche très bien...On me dit "lorqsue je clique il ne se passe rien". Normalement, une mauvaise IP, un mauvais mot de passe, etc...génère un message d'erreur. Et là ce n'est pas le cas...donc j'imagine que le problème vient de la détection du clic sur le bouton ?
En fait il y a 2 paramètres, la couleur du bouton, et sa position dans l'interface. mais logiquement les 2 doivent être identiques pour tout le monde...
Le code source .au3 de mon programme est fourni avec l'executable :
http://liveboxinfo.tk/download/LiveboxInfov2.0.0.zip
Si quelqu'un avec une livebox 3 ou 4 pouvait me faire un retour ?
C'est a partir de ligne 51 que le test du clic sur le bouton commence :
Code : Tout sélectionner
;Test des couleurs dans la GUI
$bouton1 = PixelGetColor(40, 290)
if $bouton1 = 13948116 then ; 13948116 = code couleur RGB décimal du bouton lorsqu'on clique dessus.
;MsgBox(0,"Bouton","Bouton1 pressé")
$bouton1 = 0
; Lecture du formulaire
Local $oForm = _IEFormGetObjByName($oIE, "loginForm")
Local $oIp = _IEFormElementGetObjByName($oForm, "ip")
Local $oPassword = _IEFormElementGetObjByName($oForm, "password")
$LIVEBOX = _IEFormElementGetValue($oIp)
$USER = "admin"
$PASSWORD = _IEFormElementGetValue($oPassword)
auth_livebox()
if ($connexion="OK") then
load_data()
; insertion des données dans les onglets
$sHTML = _IEDocReadHTML($oIE) ;Lecture
$sHTML = StringReplace($sHTML,'DeviceInfotxt',$List4)
$sHTML = StringReplace($sHTML,'Mibstxt',$List2)
$sHTML = StringReplace($sHTML,'DSLstatstxt',$List1)
$sHTML = StringReplace($sHTML,'WANstatustxt',$List3)
$sHTML = StringReplace($sHTML,'Wifitxt',$List5)
$sHTML = StringReplace($sHTML,'Servicestxt',$List6)
$sHTML = StringReplace($sHTML,'Voiptxt',$List7)
_IEDocWriteHTML($oIE,$sHTML) ; Ecriture
$connexion=""
endif
EndIf
Ce n'est pas impossible que le problème soit ailleurs...Bref merci pour votre aide.
Re: [..] Liveboxinfo 2.0.0 affichage infos cachées livebox
Posté : lun. 08 mai 2017 15:13
par Utilisateur 3309 supprimé
est-ce qu'il y aurait une autre méthode que PixelGetColor pour détecter que le bouton de l'interface web a été cliqué ??
Re: [..] Problème bizarre avec PixelGetColor...
Posté : lun. 08 mai 2017 22:47
par ZDS
Bonjour,
J'aurais voulu t'aider, mais le script AU3 que tu as fourni dans ton ZIP ne semble pas être utilisable dans un environnement AutoIt de base. Notamment il manque "Json.au3" que tu as eu chez toi la bonne idée de mettre dans ton dossier UDF, mais sans le fournir aux autres ca devient un problème bloquant... ^^ Si tu transmets les sources complètes, je tenterai de t'aider dès demain.
Bonne soirée et à bientôt !
Re: [..] Problème bizarre avec PixelGetColor...
Posté : mar. 09 mai 2017 01:31
par jchd
Bonsoir,
Le problème vient peut-être que la position écran dépend du réglage d'affichage. S'il n'est pas à 100% (125, 150 ou autre) la position est décalée par rapport à une installation "standard".
Re: [..] Problème bizarre avec PixelGetColor...
Posté : mar. 09 mai 2017 09:45
par Utilisateur 3309 supprimé
Bonjour,
merci pour votre aide, j'avais perdu espoir...
@zds
le fichier JSON.au3 est dispo ici :
https://www.autoitscript.com/forum/topi ... nt-1286205
un lien google drive est donné
@jchd
OK, je regarde ca.
Sinon pour info, chez moi sur 4 PC différents, cela fonctionne tout le temps, et vu que je n'arrive pas a reproduire le problème rencontré par les utilisateurs, je ne sais plus ou chercher... c'est pourquoi je me demande s'il n'existerait pas une méthode avec une fonction _IE qui permettrai de savoir si le bouton est cliqué ou non, ce serait même d’ailleurs plus "propre" que l'analyse d'un pixel...
Edit:
@jchd
effectivement, je viens de changer l'affichage à 125%, et ca ne marche plus...ca confirme donc que la méthode PixelGetColor n'est pas fiable dans mon projet...
Edit2:
@jchd
On me confirme que c'était la cause du problème ! Oufff !!! sur certains PC visiblement l'affichage recommandé, et par defaut est a 150% ???
Re: [..] Problème bizarre avec PixelGetColor...
Posté : mar. 09 mai 2017 20:37
par orax
cetipabo a écrit : ↑mar. 09 mai 2017 09:45c'est pourquoi je me demande s'il n'existerait pas une méthode avec une fonction _IE qui permettrai de savoir si le bouton est cliqué ou non, ce serait même d’ailleurs plus "propre" que l'analyse d'un pixel...
Mais ça marche mal, le script plante parfois.
Re: [..] Problème bizarre avec PixelGetColor...
Posté : mar. 09 mai 2017 23:02
par Utilisateur 3309 supprimé
Merci beaucoup Orax !
chez moi ca semble pourtant bien fonctionner !?
Par contre je ne comprends absolument rien au fonctionnement. et cette fonction Evt_onClick() à la fin, je vois nul part ou elle est utilisée ? et pourtant elle fonctionne...
peux-tu expliquer un peu le mécanisme derrière tout ça ?
Edit:
je viens de lire l'explication de ObjEvent, je comprends un peu mieux maintenant.
edit2
après implantation de la methode dans mon script, effectivement ca crash au démarrage 1 fois sur 2...chiotte !

Re: [R] Problème bizarre avec PixelGetColor...
Posté : mer. 10 mai 2017 16:44
par orax
Dans la doc, l'exemple 5 de la fonction
_IEHeadInsertEventScript
fait quelque chose de ressemblant.
_Evt_onClick est la fonction qui interceptera l'évènement
click. Voir
https://developer.mozilla.org/en-US/docs/Web/Events
Si on crée, par exemple, une fonction _Evt_onmouseenter, celle-ci se déclenchera à chaque fois que la souris passera au dessus du bouton.
querySelectorAll correspond à cette méthode du DOM :
https://developer.mozilla.org/fr/docs/W ... electorAll Elle me permet de récupérer le bouton.
Comme je cherchais à récupérer un seul bouton, j'aurais pu utiliser la méthode querySelector (sans le "All"), mais ça ne fonctionnait pas.
Le code suivant aurait été plus simple mais il ne fonctionne pas :
Code : Tout sélectionner
$oButton = $oIE.document.querySelector('button.btn.btn-sm.btn-default')
ObjEvent($oButton, "_Evt_")
Je vais essayer de comprendre pourquoi ça marche une fois sur deux.

Re: [R] Problème bizarre avec PixelGetColor...
Posté : jeu. 11 mai 2017 00:14
par Utilisateur 3309 supprimé
merci serait cool s'il pouvait y avoir une solution...tu as moyen de debugguer pour comprendre ce qu'il se passe ?
Quand ca ne plante pas, a la fermeture du script on voit qu'il y a de drôles de rafraîchissements d’écran, on dirait que le script continue de "fermer des trucs"...
Re: [R] Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 12:47
par Utilisateur 3309 supprimé
Bonjour,
@orax
j'ai lancé ton exemple de script une dizaine de fois et cliqué autant de fois sur le bouton, ça n'a jamais planté.
Par contre lorsque j'insère le principe dans mon script, la boucle suivante fait quasiment planter tout le temps:
Je ne sais pas si tu as eu le temps de regarder ce qu'il se produit ? j'aimerai bien poster la question sur le forum US mais difficile pour moi d'expliquer tout cela...
Re: [R] Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 15:09
par Utilisateur 3309 supprimé
apres quelques heures de modifications, de tests et de recherches, je viens de tomber sur ceci:
https://www.autoitscript.com/trac/autoit/ticket/2865
ce qui nous ramène ici:
https://www.autoitscript.com/forum/topi ... nt-1303644
Je n''ai par contre pas bien compris "la solution" ?!
j'ai essayé l'udf mais il ne se passe rien (mais ca ne plante pas):
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
$oIE = _IECreateEmbedded()
$html_GUI = GUICreate("test", 820, 530)
$Browser = GUICtrlCreateObj($oIE, -1, -1, 820, 540)
_IENavigate($oIE, @scriptdir & "/index.html")
GUISetState(@SW_SHOW, $html_GUI)
$oDoc = _IEDocGetObj($oIE)
$oButton = _IEquerySelectorAll($oDoc,'button', 0)
ObjEvent($oButton, "_Evt_")
Func _Evt_onClick()
msgbox(0,"","button clicked")
EndFunc
While 1
;Fermeture application si on clique sur la croix
$nMsg = GUIGetMsg()
if ($nMsg = $GUI_EVENT_CLOSE) then
exit
EndIf
WEnd
Func _IEquerySelectorAll(ByRef $oDoc, $sQuery, $iItemIndex = Default)
If Not IsObj($oDoc) Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_InvalidDataType & " Invalid DataType" & @LF)
Return SetError($_IEStatus_InvalidDataType, 1, 0)
ElseIf Not __IEIsObjType($oDoc, "browserdom") Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_InvalidObjectType & " Invalid ObjectType" & @LF)
Return SetError($_IEStatus_InvalidObjectType, 2, 0)
ElseIf Not IsNumber($iItemIndex) And $iItemIndex <> Default Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_InvalidValue & " Invalid Index" & @LF)
Return SetError($_IEStatus_InvalidValue, 3, 0)
ElseIf $iItemIndex = Default Or $iItemIndex >= 0 Then
Local $oTemp = Null
If __IEIsObjType($oDoc, "documentcontainer") Then
$oTemp = _IEDocGetObj($oDoc)
ConsoleWriteError("--> _IEDocGetObj Error: " & @error & " Ext: " & @extended & @LF)
If @error Then Return SetError(@error, @extended, 0)
Else
$oTemp = $oDoc
EndIf
Local $oClassColl = $oTemp.querySelectorAll($sQuery)
If @error Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IESTATUS_GeneralError & " GeneralError1: " & @error & @LF)
Return SetError($_IESTATUS_GeneralError, 3, 0)
ElseIf (Not IsObj($oClassColl)) Or $oClassColl = Null Or $oClassColl.length = 0 Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_NoMatch & " NoMatch" & @LF)
Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
Else
If $iItemIndex = Default Then
Return SetError($_IEStatus_Success, $oClassColl.length, $oClassColl)
ElseIf $iItemIndex > $oClassColl.length Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_InvalidValue & " Invalid Value" & @LF)
Return SetError($_IEStatus_InvalidValue, $oClassColl.length, 0)
Else
$oItem = $oClassColl.Item($iItemIndex)
If @error Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IESTATUS_GeneralError & " GeneralError2: " & @error & @LF)
Return SetError($_IESTATUS_GeneralError, 3, 0)
ElseIf (Not IsObj($oItem)) Or $oItem = Null Then
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_NoMatch & " NoMatch Index: " & $iItemIndex & @LF)
Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
Else
Return SetError($_IEStatus_Success, 0, $oItem)
EndIf
EndIf
EndIf
Else
ConsoleWriteError("--> _IEquerySelectorAll Error: " & $_IEStatus_InvalidValue & " Invalid Value: " & $iItemIndex & @LF)
Return SetError($_IEStatus_InvalidValue, 3, 0)
EndIf
EndFunc ;==>_IEquerySelectorAll
; User's COM error function.
; After SetUp with ObjEvent("AutoIt.Error", ....) will be called if COM error occurs
Func _User_ErrFunc($oError)
; Do anything here.
ConsoleWrite(@ScriptFullPath & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_User_ErrFunc
Re: [R] Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 17:30
par orax
Le
bloc 2 devrait fonctionner, mais ce n'est pas une solution, je ne fais que contourner le problème.
Code : Tout sélectionner
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Error monitoring. This will trap all COM errors while alive.
; This particular object is declared as local, meaning after the function returns it will not exist.
_IEErrorHandlerRegister("_ErrFunc")
$oIE = _IECreateEmbedded()
$html_GUI = GUICreate("LiveBoxInfos 2.0.0", 820, 530)
$Browser = GUICtrlCreateObj($oIE, -1, -1, 820, 540)
GUISetState()
_IENavigate($oIE, @scriptdir & "/index2.html")
; --Bloc 1--
; Ne fonctionne pas si la ligne
; <meta http-equiv="X-UA-Compatible" content="IE=edge">
; est présente dans le fichier HTML. Pourquoi ?!
;~ $oButton = $oIE.document.getElementById("abc")
;~ ObjEvent($oButton, "_Evt_")
; --Bloc 2--
; Fonctionne dans tous les cas.
$oButtons = $oIE.document.getElementsByTagName('button')
For $oButton In $oButtons
ObjEvent($oButton, "_Evt_")
Next
While 1
;Fermeture application si on clique sur la croix
$nMsg = GUIGetMsg()
if ($nMsg = $GUI_EVENT_CLOSE) then
exit
EndIf
WEnd
Func _Evt_onClick()
ConsoleWrite("Bouton cliqué." & @CRLF)
EndFunc
Func _ErrFunc($oError)
; Do anything here.
ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Fichier index2.html :
Code : Tout sélectionner
<!DOCTYPE html>
<html>
<head>
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<button type="button" id="abc">Connexion</button>
<body>
</html>
Le
bloc 1 retourne l'erreur COM suivante :
TYPE_E_FIELDNOTFOUND
0x80028017
Field name not defined in the record. (Le nom de rubrique n'est pas défini dans l'enregistrement.)
Voir la liste des codes sur
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Re: Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 18:29
par Utilisateur 3309 supprimé
Merci beaucoup orax, cette solution me convient très bien !!!
Concernant la balise <meta http-equiv="X-UA-Compatible" content="IE=edge">, elle a pour but de forcer IE a utiliser le moteur de rendu le plus récent, et donc d'éviter le "quirks" mode (passage en IE7), IE aurait tendance a forcer ce mode sur les pages locales/intranet. Si je ne mets pas cette ligne ma mise en page est toute foirée (car j'utilise le css Boostrap ?), peut etre qu'elle ne serait pas necessaire si ma page était hébergée sur internet...je ne sais pas.
Re: Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 19:01
par Utilisateur 3309 supprimé
Ha zut, et si je mets un deuxième bouton, comment je différencie les clics sur l'un ou l'autre bouton si j'utilise la méthode:
$oButtons = $oIE.document.getElementsByTagName('button')
??
Edit:
dans le fichier html j'ajoute dans chaque bouton : name="bouton1" et name="bouton2".
puis j'utilise :
Code : Tout sélectionner
$oButtons1 = $oIE.document.getElementsByName('bouton1')
For $oButton1 In $oButtons1
ObjEvent($oButton1, "_Evt1_")
Next
$oButtons2 = $oIE.document.getElementsByName('bouton2')
For $oButton2 In $oButtons2
ObjEvent($oButton2, "_Evt2_")
Next
Func _Evt1_onClick()
...
EndFunc
Func _Evt2_onClick()
...
EndFunc
C'est propre comme ca ?
Re: Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 20:57
par orax
Si ça marche c'est mieux que rien. Mais ça me dérange de devoir utiliser une boucle For In alors que ça ne devrait pas être nécessaire.
Sur la page
Doubts about the ObjEvent() function, Chimp a le même problème. Je pense que le code que tu as posté
ici ne fonctionne pas pour les mêmes raisons. Mais j'aurais bien aimé avoir une explication...
D'après ce que j'ai compris, le code de Chimp utilise une référence à l'objet Javascript global. Je ne sais vraiment pas quelle méthode est la plus propre. Je mets deux codes où je me suis inspiré de sa méthode.
Il est possible que ça ne marche qu'avec IE 11 et supérieur.
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <string.au3>
#include <file.au3>
Global $oDocument
Example()
Func Example()
; read html page from bottom of this script
; and write it to a temp file on disk for later
; usage by the $oIE.navigate
Local $sFilename = CreateHtmlPage()
Local $hGUIMain = GUICreate("Event Test", 540, 400)
; We generate the Browser Control...
Global $oIE = ObjCreate("Shell.Explorer.2")
; and we embed it into the AutoIt GUI
$hIE = GUICtrlCreateObj($oIE, 5, 5, 530, 390)
GUISetState() ;Show GUI
; load in the browser the previously created web page
$oIE.navigate('file:///' & $sFilename)
Do ; wait for document
Sleep(250)
$oDocument = $oIE.document
Until IsObj($oDocument)
; $oDocument.execCommand("Refresh")
; $ohJS is a reference to the javascript Global Obj
; JSglobal is a variable created within the HTML
; https://msdn.microsoft.com/en-us/library/52f50e9t(v=vs.94).aspx
; -------------------------------------------------
Global $ohJS = $oIE.document.parentwindow.JSglobal
ObjEvent($oDocument, "DocEvent2_", "HTMLDocumentEvents2")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
; the end
$oIE = 0 ; Remove IE from memory (not really necessary).
GUIDelete($hGUIMain) ; Remove GUI
FileDelete($sFilename)
EndFunc ;==>Example
; following function should be fired by events
; occurred in the browser's objects
;
; The function automatically called by an event
; will receive as parameter an Event Obj.
; This obj is loaded with many properties related to
; the object that fired the event. See following link:
; https://msdn.microsoft.com/en-us/library/aa703876(v=vs.85).aspx
; --- events management zone ---
Volatile Func DocEvent2_onClick($oEvent)
Local $sID = $oEvent.srcElement.id
ConsoleWrite("ID = " & $sID & @CRLF)
Switch $sID
Case "btn1"
ConsoleWrite("Bouton 1" & @CRLF)
Case "btn2"
ConsoleWrite("Bouton 2" & @CRLF)
Case Else
ConsoleWrite(StringFormat("L'élément <%s> n'a pas d'ID\r\n", $oEvent.srcElement.nodeName))
EndSwitch
EndFunc ;==>DocEvent2_onClick
; ------------------------------
Func ConsolePrint($sMsg)
ConsoleWrite($sMsg & @CRLF)
EndFunc ;==>ConsolePrint
Func _ObjDescription(ByRef $oObj, $msg = "") ; for debug purpose
ConsoleWrite('--Debug:----------------------------------------------------------------------------' & @CRLF & _
"[" & $msg & "]" & @CRLF)
If IsObj($oObj) Then
ConsoleWrite( _
'The name of the Object:.......................' & ObjName($oObj, $OBJ_NAME) & @CRLF & _
'Description string of the Object:.............' & ObjName($oObj, $OBJ_STRING) & @CRLF & _
'The ProgID of the Object:.....................' & ObjName($oObj, $OBJ_PROGID) & @CRLF & _
'file associated with the obj in the Registry:.' & ObjName($oObj, $OBJ_FILE) & @CRLF & _
'Module name in which the object runs:.........' & ObjName($oObj, $OBJ_MODULE) & @CRLF & _
"CLSID of the object's coclass:................" & ObjName($oObj, $OBJ_CLSID) & @CRLF & _
"IID of the object's interface:................" & ObjName($oObj, $OBJ_IID) & @CRLF)
Else
ConsoleWrite("Is not an object" & @CRLF)
EndIf
EndFunc ;==>_ObjDescription
Func CreateHtmlPage()
Local $aArray = StringRegExp(FileRead(@ScriptFullPath), "(?s)\R#cs;HTML\R(.+?)#ce;HTML(?:\R|$)", 3)
Local $sPage = _TempFile(@ScriptDir, Default, ".html")
Local $hFile = FileOpen($sPage, 2) ; $FO_OVERWRITE (2) = Write mode (erase previous contents)
FileWrite($hFile, $aArray[0])
FileClose($hFile)
Return $sPage
EndFunc ;==>CreateHtmlPage
#cs;HTML
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="text/javascript">var JSglobal=(1,eval)("this");</script>
</head>
<body>
<button type="button" id="btn1">Connexion</button>
<button type="button" id="btn2">Connexion 2</button>
<body>
</html>
#ce;HTML
;
Code : Tout sélectionner
#include <IE.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Error monitoring. This will trap all COM errors while alive.
; This particular object is declared as local, meaning after the function returns it will not exist.
_IEErrorHandlerRegister("_ErrFunc")
$oIE = _IECreateEmbedded()
$html_GUI = GUICreate("LiveBoxInfos 2.0.0", 820, 530)
$Browser = GUICtrlCreateObj($oIE, -1, -1, 820, 540)
GUISetState()
$sFilename = CreateHtmlPage()
_IENavigate($oIE, $sFilename)
; Ne marche pas !! Pourquoi ?
;~ $oButton = $oIE.document.getElementById("a")
;~ ObjEvent($oButton, "_Evt_")
; Mais de cette façon, ça marche...
; https://www.autoitscript.com/forum/topic/186320-doubts-about-the-objevent-function/
$ohJS = $oIE.document.parentwindow.JSglobal
ObjEvent($ohJS.btn1, "_Evt_btn1_")
ObjEvent($ohJS.btn2, "_Evt_btn2_")
While 1
;Fermeture application si on clique sur la croix
$nMsg = GUIGetMsg()
if ($nMsg = $GUI_EVENT_CLOSE) then
ExitLoop
EndIf
WEnd
FileDelete($sFilename)
Func _Evt_btn1_onclick()
ConsoleWrite("Bouton 1" & @CRLF)
EndFunc
Func _Evt_btn2_onclick()
ConsoleWrite("Bouton 2" & @CRLF)
EndFunc
Func _ErrFunc($oError)
; Do anything here.
ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Func CreateHtmlPage()
Local $aArray = StringRegExp(FileRead(@ScriptFullPath), "(?s)\R#cs;HTML\R(.+?)#ce;HTML(?:\R|$)", 3)
Local $sPage = _TempFile(@ScriptDir, Default, ".html")
Local $hFile = FileOpen($sPage, 2) ; $FO_OVERWRITE (2) = Write mode (erase previous contents)
FileWrite($hFile, $aArray[0])
FileClose($hFile)
Return $sPage
EndFunc ;==>CreateHtmlPage
#cs;HTML
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="text/javascript">var JSglobal=(1,eval)("this");</script>
</head>
<body>
<button type="button" id="btn1">Connexion</button>
<button type="button" id="btn2">Connexion 2</button>
<body>
</html>
#ce;HTML
;
Re: Problème bizarre avec PixelGetColor...
Posté : ven. 12 mai 2017 22:39
par Utilisateur 3309 supprimé
Merci, je vais analyser tout ca !
Edit:
Si j'ai bien compris, dans la 1ere methode:
$ohJS = $oIE.document.parentwindow.JSglobal
et le script JS dans le fichier html ne sont pas utiles, c'est uniquement pour la 2eme methode.
Bon au final je me retrouve avec 3 alternatives à pixelgetcolor, qui marchent et qui ne plante pas
