Bien du courage à ceux qui mettent les mains dans le cambouis
[Ex] IE.au3 // Exemples et FAQ
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[Ex] IE.au3 // Exemples et FAQ
Bonjour à tous. Comme beaucoup d'entre vous bossent avec l'include IE.au3, je poste ici quelques recherches que j'ai pu effectuer sur le sujet. Je mettrai des exemples à la suite en fonction des questions qui se posent sur le forum. Ce post sera tenu propre mais n'hesitez pas à commenter certains exemples si ils ne vous parlent pas !
Bien du courage à ceux qui mettent les mains dans le cambouis
Bien du courage à ceux qui mettent les mains dans le cambouis
Modifié en dernier par timmalos le lun. 18 juil. 2011 09:00, modifié 5 fois.
Raison : Mise à jour du sujet
Raison : Mise à jour du sujet
Re: [Ex] IE.au3 // Exemples et approfondissements
Qu'est ce qu' IE.au3?
IE.au3 est un UDF qui nous permet d'automatiser, de contrôler et d'utiliser IExplore, le celèbre navigateur de Microsoft, aussi appelé Internet Explorer. La version de base utilisée dépend de votre version de windows.
Pour ceux qui se diraient actuellement : "IE c'est de la daube, rien à foutre de ce sujet à la con", sachez seulement qu'IE est le seul programme installé sur tous les ordinateurs sous Windows qui permet d'acceder à internet. Si vous avez besoin d'utiliser une fonctionnalité avancée d'un navigateur dans votre programme et que ce programme va être distribué à grande echelle, c'est vers IE.au3 qu'il faudra vous tourner.
Cependant, si c'est pour votre usage personnel, vous pouvez envisager l'utilisation de FF.au3 qui utilise Firefox et un module externe à installer nommé MozRepl. Suivez le lien suivant : http://autoitscript.fr/forum/viewtopic.php?f=21&t=2296
La première chose à savoir, c'est que Microsoft propose 2 objets bien distincts :
Comment acceder à la documentation pour aller plus loin que ce que propose IE.au3?
Reference for Visual Basic Developers WebBrowser: (=ACCUEIL de L'aide MSDN)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for Internet Explorer Object : (=_IECreate)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for WebBrowser Object : (=_IECreateEmbedded)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for Document Object:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for A element Object : (<a href=...></a>)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
IE.au3 est un UDF qui nous permet d'automatiser, de contrôler et d'utiliser IExplore, le celèbre navigateur de Microsoft, aussi appelé Internet Explorer. La version de base utilisée dépend de votre version de windows.
Pour ceux qui se diraient actuellement : "IE c'est de la daube, rien à foutre de ce sujet à la con", sachez seulement qu'IE est le seul programme installé sur tous les ordinateurs sous Windows qui permet d'acceder à internet. Si vous avez besoin d'utiliser une fonctionnalité avancée d'un navigateur dans votre programme et que ce programme va être distribué à grande echelle, c'est vers IE.au3 qu'il faudra vous tourner.
Cependant, si c'est pour votre usage personnel, vous pouvez envisager l'utilisation de FF.au3 qui utilise Firefox et un module externe à installer nommé MozRepl. Suivez le lien suivant : http://autoitscript.fr/forum/viewtopic.php?f=21&t=2296
La première chose à savoir, c'est que Microsoft propose 2 objets bien distincts :
- Le premier est l'objet complet, qui permet à peu près de tout faire. A peu de choses près, cela correspond au meme que lorsque vous lancez IExplore.exe manuellement, sauf qu'ici on récupère une variable $oIE qui nous permet de travailler sur cet objet.
Vous pouvez tester le code suivant qui va juste lancer IE puis se fermer.Cette version est celle qui est attachée à _IECreate()Code : Tout sélectionner
Local $o = ObjCreate("InternetExplorer.Application") $o.visible = 1 - Le deuxième est une version minimaliste, mais qui peut être integrée directement dans un programme, ce que ne permet pas le premier.
Ce dernier doit être integré dans un programme car il ne peut pas fonctionner en autonomie. On utilise pour cela la fonction GUICtrlCreateObj en Autoit.
Code : Tout sélectionner
ObjCreate("Shell.Explorer.2")
Cette version est celle qui est attachée à _IECreateEmbedded()
Vous pouvez alors voir l'aide de cette fonction pour comprendre le fonctionnement de cet objet.
Gardez en mémoire que si cet objet est très utile pour être intégré directement dans une fenêtre de votre cru, pour simuler un navigateur internet par exemple, il ne permet pas de TOUT faire comme le premier, et certaines propriétés vous seront interdites.
Comment acceder à la documentation pour aller plus loin que ce que propose IE.au3?
Reference for Visual Basic Developers WebBrowser: (=ACCUEIL de L'aide MSDN)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for Internet Explorer Object : (=_IECreate)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for WebBrowser Object : (=_IECreateEmbedded)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for Document Object:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Reference for A element Object : (<a href=...></a>)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Re: [Ex] IE.au3 // Exemples et approfondissements
Comment obtenir l'adresse URL de ma fenêtre IE active?
Souvenez vous de la fonction _IEPropertyGet qui peut être une mine d'or. L'aide vous sera fort utile !
Comment obtenir les cookies/en définir de nouveaux sur ma page?
Vous obtiendrez une chaine de charactère contenant tous les cookies de la page. A vous de l'analyser avec des RegExp pour obtenir seulement la valeur souhaitée.
Pour définir de nouveaux cookies, veuillez lire le sujet suivant (EN) http://www.autoitscript.com/forum/topic ... ntry873962
Comment capter les evenements qui surviennent sur ma fenêtre IE?
Dans le premier exemple, IE.au3 n'est pas utilisé.
Tout est basé sur les infos que vous pouvez trouver sur MSDN : http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Comment prévenir/controler la navigation/rafraichissement/fermeture de ma fenêtre IE?
J'ai eu besoin de contrôler la fermeture d'Internet Explorer, en affichant en message à l'utilisateur pour l'informer que si il fait cela, il perdra tout son travail sur mon application. Il n'existe pas à proprement parler d'evenement OnQuit pour Internet Explorer ce qui rend très difficile cette tâche, même si MSDN dit le contraire
Voilà donc une solution retenue sur le forum américain par Dale (toujours lui) qui permet de controler le rafraichissement de la page ou la fermeture d'une fenetre IE grâce à du javascript.
Code : Tout sélectionner
_IEPropertyGet($oIE,"locationurl")Comment obtenir les cookies/en définir de nouveaux sur ma page?
Code : Tout sélectionner
If IsObj($oIE) Then $doc = _IEDocGetObj($oIE)
If IsObj($doc) Then
$cookies = string($doc.cookie)Pour définir de nouveaux cookies, veuillez lire le sujet suivant (EN) http://www.autoitscript.com/forum/topic ... ntry873962
Comment capter les evenements qui surviennent sur ma fenêtre IE?
Dans le premier exemple, IE.au3 n'est pas utilisé.
Tout est basé sur les infos que vous pouvez trouver sur MSDN : http://msdn.microsoft.com/en-us/library ... 85%29.aspx
► Afficher le texteIe Events
J'ai eu besoin de contrôler la fermeture d'Internet Explorer, en affichant en message à l'utilisateur pour l'informer que si il fait cela, il perdra tout son travail sur mon application. Il n'existe pas à proprement parler d'evenement OnQuit pour Internet Explorer ce qui rend très difficile cette tâche, même si MSDN dit le contraire
Voilà donc une solution retenue sur le forum américain par Dale (toujours lui) qui permet de controler le rafraichissement de la page ou la fermeture d'une fenetre IE grâce à du javascript.
► Afficher le texte
Re: [Ex] IE.au3 // Exemples et FAQ
Comment savoir si la fenêtre IE répond bien?
Il peut arriver que la fenetre Internet Explorer plante completement. Et alors la, vous l'avez bien dans l'os avec votre automatisation de tâche, car tout va planter lamentablement, et un simple ProcessKill() sur IExplore.exe peut ne pas suffire.
Dans ce cas, je vous invite à utiliser le bout de code suivant, qui detecte si votre fenêtre IE freeze ou non :
si $aerror = 1, Alors vous pouvez enclencher le plan B : Detruire tous les objets, Fermer IE, et relancer votre automatisation.
Comment forcer la fermeture d'IE?
J'ai précedemment publié un outil qui marche à merveille, mieux même que quand vous faites Ctrl+Alt+Del pour forcer la fermeture d'un programme. Suivez le lien suivant, il contient tous les exemples pour la fermeture d'un process IE :
http://autoitscript.fr/forum/viewtopic.php?f=21&t=3761
Vous pourrez voir dans les exemples du lien précédant qu'il vius faut connaitre le PID du process pour pouvoir forcer sa fermeture.
Si vous voulez forcer la fermeture de la fenêtre IE active mais pas des autres fenetres IE, vous pouvez utiliser la fonction suivante _GetHwndFromPID($PID) qui retourne l'Handle de la fenetre à partir du PID. Ainsi vous pourrez comparer l'Handle de la fenetre active à celle retournée et être certain de fermer le bon IExplore.exe
http://autoitscript.fr/forum/viewtopic.php?f=21&t=5411
Comment supprimer le cache d'IE?
Pour certaines simulations, le cache peut poser problème, par exemple en ne téléchargeant pas certaines informations, et pour un système de Log j'avais besoin d'avoir toujours le même temps de chargement de page en cas de réussite du scénario. Voilà donc une fonction qui vide tout le cache d'IE. Cette fonction a été écrite par Tlem.
Il peut arriver que la fenetre Internet Explorer plante completement. Et alors la, vous l'avez bien dans l'os avec votre automatisation de tâche, car tout va planter lamentablement, et un simple ProcessKill() sur IExplore.exe peut ne pas suffire.
Dans ce cas, je vous invite à utiliser le bout de code suivant, qui detecte si votre fenêtre IE freeze ou non :
Code : Tout sélectionner
If IsObj($oIE) Then
_IELoadWait($oIE)
$aerror = 0
$v_ret = DllCall("user32.dll", "int", "IsHungAppWindow", "hwnd", HWnd($oIE.HWND))
If @error <> 0 Or $v_ret[0] Then $aerror = 1
Else
$aerror = 1
EndIfComment forcer la fermeture d'IE?
J'ai précedemment publié un outil qui marche à merveille, mieux même que quand vous faites Ctrl+Alt+Del pour forcer la fermeture d'un programme. Suivez le lien suivant, il contient tous les exemples pour la fermeture d'un process IE :
http://autoitscript.fr/forum/viewtopic.php?f=21&t=3761
Vous pourrez voir dans les exemples du lien précédant qu'il vius faut connaitre le PID du process pour pouvoir forcer sa fermeture.
Si vous voulez forcer la fermeture de la fenêtre IE active mais pas des autres fenetres IE, vous pouvez utiliser la fonction suivante _GetHwndFromPID($PID) qui retourne l'Handle de la fenetre à partir du PID. Ainsi vous pourrez comparer l'Handle de la fenetre active à celle retournée et être certain de fermer le bon IExplore.exe
http://autoitscript.fr/forum/viewtopic.php?f=21&t=5411
Comment supprimer le cache d'IE?
Pour certaines simulations, le cache peut poser problème, par exemple en ne téléchargeant pas certaines informations, et pour un système de Log j'avais besoin d'avoir toujours le même temps de chargement de page en cas de réussite du scénario. Voilà donc une fonction qui vide tout le cache d'IE. Cette fonction a été écrite par Tlem.
► Afficher le texteFunc _EmptyIECache()
Re: [Ex] IE.au3 // Exemples et FAQ
_IECreateEmbedded est trop limité pour mes besoins, comment faire?
Comme expliqué précedemment, _IECreateEmbedded utilise une version limité d'Internet Explorer, qui ne permet pas de tout faire. Il existe une alternative, mais il vous sera difficile de l'exploiter pleinement sans un niveau suffisant, très peu d'informations étant disponibles à ce sujet.
Cette alternative permet l'utilisation d'une instance d'IE complète, comme si vous utilisiez _IECreate(), tout en l'incorporant à votre fenêtre comme vous le feriez avec ActiveX et _IeCreateEmbedded()
Voilà un code montrant cette alternative: (Plus d'infos ici : http://www.autoitscript.com/forum/topic ... hl__ie+dns)
Comme expliqué précedemment, _IECreateEmbedded utilise une version limité d'Internet Explorer, qui ne permet pas de tout faire. Il existe une alternative, mais il vous sera difficile de l'exploiter pleinement sans un niveau suffisant, très peu d'informations étant disponibles à ce sujet.
Cette alternative permet l'utilisation d'une instance d'IE complète, comme si vous utilisiez _IECreate(), tout en l'incorporant à votre fenêtre comme vous le feriez avec ActiveX et _IeCreateEmbedded()
Voilà un code montrant cette alternative: (Plus d'infos ici : http://www.autoitscript.com/forum/topic ... hl__ie+dns)
Code : Tout sélectionner
#Include <WindowsConstants.au3> #include <WinAPI.au3> #Include <Constants.au3> local $pid, $hHandle, $hGUI, $sURL, $xHeight, $xWidth $sURL = "www.google.com" $xWidth = 1024 $xHeight = 568 $hGUI = GUICreate("Test", $xWidth, $xHeight) $oIE = _IECreate2($xWidth, $xHeight, $hGUI) ;Apres cette ligne, vous pouvez utilisez les fonctions _IE comme vous l'auriez fait normalement. func _IECreate2($xWidth, $xHeight, $hGUI) $pid = Run(@ProgramFilesDir&"\internet explorer\iexplore.exe -k "&$sURL, "", @SW_HIDE) Sleep(2000) $hHandle = _ProcessGetHWnd($pid) GUISetState(@SW_SHOW, $hGUI) _WinAPI_SetParent($hHandle, $hGUI) _WinAPI_MoveWindow($hHandle, 0, 0, $xWidth, $xHeight, True) _WinAPI_SetWindowLong($hHandle, $GWL_STYLE, $WS_POPUP+$WS_VISIBLE) Send("{F5}") EndFunc Func _ProcessGetHWnd($iPid, $iOption = 1, $sTitle = "", $iTimeout = 2000) Local $aReturn[1][1] = [[0]], $aWin, $hTimer = TimerInit() While 1 $aWin = WinList($sTitle) For $i = 1 To $aWin[0][0] If $iPid = WinGetProcess($aWin[$i][1]) Then If $iOption = 1 OR ($iOption = 0 And $aWin[$i][0] <> "") Then Return $aWin[$i][1] ElseIf $iOption = 2 Then ReDim $aReturn[UBound($aReturn) + 1][2] $aReturn[0][0] += 1 $aReturn[$aReturn[0][0]][0] = $aWin[$i][0] $aReturn[$aReturn[0][0]][1] = $aWin[$i][1] EndIf EndIf Next If $iOption = 2 And $aReturn[0][0] > 0 Then Return $aReturn If TimerDiff($hTimer) > $iTimeout Then ExitLoop Sleep(Opt("WinWaitDelay")) WEnd SetError(1) Return 0 EndFunc ;==>_ProcessGetHWnd Do Sleep(200) Until GUIGetMsg() = -3 ProcessClose($pid)

