Page 1 sur 1

Différencier les onglets d'Internet Explorer (IE.au3)

Posté : mer. 20 avr. 2016 22:29
par koan2016
Bonjour,

Je sais que la question a déjà été posée mais je n'ai pas trouvé la réponse à mon problème.

J'ai suis entrain de faire script qui vérifie si l'on est sur Internet Explorer et si c'est bien le cas, qui vérifie si le nom de la page est dans une bdd sqlite.

Le début (approximativement) ~:

Code : Tout sélectionner

While 1
	;fenetre IE active ?
	$nMsg = GUIGetMsg()
	Local $sText = WinGetTitle("[ACTIVE]")
	Local $iPosition = StringInStr($sText, "Windows Internet Explorer")
	If ( $iPosition > 0) Then
			$sTitle = StringReplace($sText, " - Windows Internet Explorer", "") 
			If ($tTitle <> $sTitle) Then	
	
Comme je n'ai pas envie de "requêter" la BD toute les dixièmes de seconde, je regarde si la fenêtre ou le <title> de la page a changé. Le problème, c'est un cas anodin ou il y a trois 3 onglets avec la même page et la même "url".

1 ) J'ai regardé "Hnwd", mais c'est le même pour tous les onglets.
2 ) Je pourrais insérer un identifiant dans chaque page, par exemple une chaine de caractère et un timestamp, à la première ouverture. Mais ça oblige alors, chaque fois, le script à _IEAttach pour vérifier le contenu de la page, ce qui est, je trouve, un peu lourd. (C'est subjectif, mais j'aime bien faire simple si possible et en plus, ça ralentit le script.)
3 ) Je pourrais numéroter les onglets : mais problème idem que précédent (->http://stackoverflow.com/questions/2167 ... ing-autoit)

Avez-vous une idée ? ou dois-je envisager de rester sur la seconde ou troisième option ?

Merci beaucoup.

[L'idée et de faire un script qui permet l'insertion de fonctions javascript et autoit (via HTMLDocumentEvents.au3) pour se simplifier la vie lors de l'utilisation de certaine applis WEB (D'où la BD pour vérifier de quelles applis et de quelles pages il s'agit), mais je me questionne encore sur l'utilité réelle d'un tel projet]

Re: Différencier les onglets d'Internet Explorer (IE.au3)

Posté : jeu. 21 avr. 2016 21:06
par koan2016
Bon, je ne comprend pas très bien l'anglais, mais apparement, c'est pas possible : https://www.autoitscript.com/forum/topi ... ed-ie-tab/

J'en reste donc à mon idée de base et tant pis si c'est plusieurs fois la même page, je mettrait une hotkey pour forcer la prise en compte d'un changement de page...

Merci quand même.

Le début du script pour le moment :

Code : Tout sélectionner

#include <Date.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include "HTMLDocumentEvents.au3"
#include <WindowsConstants.au3>
#include <WinAPI.au3>


Local $aMsg = ''
Local $compteur = 0
Local $CurrentTitle = ""
Local $LastTitle = " "
;-------------------------------------------------------------------------------------------------;
;---------------------------connexion database et boucle principale-------------------------------;
;-------------------------------------------------------------------------------------------------;
;fichier db
Local $sDbName = "url_manager" ;
;lancement de sqlite
_SQLite_Startup()
If @error Then
    MsgBox($MB_SYSTEMMODAL, "SQLite Error", "SQLite3.dll Can't be Loaded!")
    Exit -1
EndIf
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
Local $hDskDb = _SQLite_Open($sDbName) ;
If @error Then
    MsgBox($MB_SYSTEMMODAL, "SQLite Error", "Can't open or create a permanent Database!")
    Exit -1
EndIf
;la boucle
While 1
	;fenetre IE active ?
	$nMsg = GUIGetMsg()
	Local $ActiveWindows = WinGetTitle("[ACTIVE]")
	Local $IsWindowsIE = StringInStr($ActiveWindows, "Windows Internet Explorer")
	If ( $IsWindowsIE > 0) Then
		ConsoleWrite("Je suis sous IE : " & $ActiveWindows & @CRLF )
			$CurrentTitle = StringReplace($ActiveWindows, " - Windows Internet Explorer", "")
			If ($LastTitle <> $CurrentTitle) Then ;Ici, ça ne fonctionne pas si on va sur une autre TAB avec la même page ouverte
				ConsoleWrite("J'ai changé de fenetre IE : " & $CurrentTitle & @CRLF )

				;attacher IE et variables d'identifications de fenêtres
				$oIE = _IEAttach($CurrentTitle)
				If @error = $_IEStatus_NoMatch Then
					ConsoleWrite("ERREUR ATTACHE PAGE " & @CRLF )
					;Si l'attachement ne fonctionne pas, on sort juste du if
				Else
				_IEPageLoadWait($oIE)
				$oIEurl = _IEPropertyGet($oIE,"locationurl")
				$oIEurl = StringReplace($oIEurl, "#", "") ;on enleve le # de positionnement des pages
				
				;ICI -> Il y aura l'appel de la fonction qui ira vérifier si la page a déjà été traité et si non, ira chercher en BD si la page/frame/url est présente, 

				$LastTitle = $CurrentTitle
				EndIf
			EndIf
	Else
	ConsoleWrite("Je ne suis pas sous IE : " & @CRLF )
	EndIf

	Sleep(200)
	$compteur = $compteur  + 1
	ConsoleWrite("Boucle principale n°" & $compteur & " terminée" & @CRLF )
WEnd
_SQLite_Close()
_SQLite_Shutdown()

;fonction trouvée sur internet
Func _IEPageLoadWait($objAppIE)
	Do
	    Sleep(100)
	Until IsObj($objAppIE)
    Do
        Sleep(100)
    Until ($objAppIE.readyState = 'complete' Or $objAppIE.readyState = 4)
    Do
        Sleep(100)
    Until ($objAppIE.document.readyState = 'complete' Or $objAppIE.document.readyState = 4)
EndFunc