fr3br0
Messages postés22Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention16 octobre 2007
-
12 sept. 2007 à 20:09
Utilisateur anonyme -
12 nov. 2007 à 20:42
Bonjour,
Bon tout d'abord je ne connais pas visual basic et de plus je poste ici sans être sûr que ce soit le bon endroit
J'ai installé une extension firefox dans laquelle défilent à intervalles réguliers des messages extraits de la BDD mysql de mon serveur
Ce que je recherche, c'est d'autoriser l'affichage des messages UNIQUEMENT si le browser en cours est au 1er plan (les messages texte ne devant pas s'afficher dans un browser en arrière plan ou réduit, au cas où plusieurs browser sont utilisés)
Y a t-il moyen de réaliser cela ?
Je ne connais pas grand chose au VB mais peut-être un exécutable qui vérifie la présence de la fenêtre au 1er plan puis envoie un message au serveur pour continuer ou interrompre l'envoie des données
Je t'ai fait un exemple :
(Et je me suis tromper, c'était GetForegroundWindow au lieu de GetActiveWindow)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private NavHWnd As Long
Private Sub Form_Load()
' Récupération de l'handle du navigateur
NavHWnd = FindWindow("IEFrame", vbNullString)
End Sub
' Et pour vérifier s'il est au premier plan :
If GetForegroundWindow() = NavHWnd Then
' IE est au premier plan
End If, ----
(Automatic color syntaxing by Kenji)
Tu peux connaître tout les navigateurs ouverts (leurs instance, (handle/hWnd)), et celui qui est devant tous.
Tu peux connaître si une barre d'outils (barre d'outils attaché au navigateur et non à la page affichée (la barre d'outils a elle aussi un handle)) existe sur un navigateur. Sinon, tu peux connaître l'url de la page active, donc recharger cette page dans ton exe, et analyser le code html ainsi obtenue.
Mais avant tout, il faut s'intéresser de comment récupéré tout ça car celà dépend du navigateur que tu utilise. Sachant que ca ne sera peut-être pas possible pour tous les navigateurs.
Ensuite, pour la base de donnée, je ne maîtrise pas trop ce domaine, regarde dans les sources.
fr3br0
Messages postés22Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention16 octobre 2007 30 sept. 2007 à 19:14
Bonjour,
Et merci pour la réponse et désolé de répondre si tard. Je dispose maintenant de VB6 et pourrai tester. Le code que tu proposes semble très bien fonctionner pour déterminer si IE est ou non au 1er plan mais ma demande était tout autre : c'est de savoir si le navigateur au 1er plan (ou actif) contient ou non ma barre d'outil (donc la possibilité de faire défiler du texte). C'est une nuance importante
Vu de ma fenetre, voila comment je sens les choses :
- le navigateur dans lequel défile le texte à une ID unique pour Windows (un handle me semble t-il ???)
- dans le cas de mon application, plusieurs navigateurs peuvent être ouvert en même temps donc plusieurs connexion à la BDD depuis le même PC. Disons 3 pour l'exemple. Ce qui donne également trois barres d'outils
- le role de l'EXE est de déterminer si le navigateur au 1er plan contient ou non une barre d'outil (ou le texte si c'est plus simple à réaliser).
- donc pour simplifier, il doit interroger par défaut le navigateur "actif" et trouvers'il y a présence ou pas de la barre d'outil (pour info le texte est affiché dans une balise DIV).
- ensuite l'EXE se connecte à la base de données et dans une table de suivi, met un drapeau à 1 dans l'enregistrement correspondant au bon navigateur et à zéro pour les 2 autres.L'ID de l'enregistrement étant le handle du navigateur.
- ce qui fait qu'avant d'extraire les données de la BDD, le script PHP (qui s'exécute depuis la barre d'outils) lit le drapeau et n'effectue le traitement que si celui-ci est à 1
- les textes s'affichant toutes les 60 secondes, l'EXE devra s'exécuter toutes les 45 secondes, par exemple.
Cet EXE jouera donc le role de surveillant du navigateur actif:
- il ne trouve aucune barre d'outil alors tous les drapeaux à zéro
- il trouve une barre d'outil alors ce drapeau à 1 et tous les autres à zéro
Ce que je ne maitrise pas du tout, ce sont les termes gras en rouge et dans une moindre mesure les termes gras en orange . Toutes vos idées sont les bienvenues
fr3br0
Messages postés22Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention16 octobre 2007 8 oct. 2007 à 14:08
Bon je continue a me former sur VB6 : passionnant.
J'ai donc exécuté le code qui fonctionne parfaitement pour
IE hwnd = FindWindow("IEFrame", 0&)
Firefox hwnd = FindWindow("MozillaUIWindowClass", 0&)
Au passage, savez-vous quelle est la différence entre la classe MozillaUIWindowClass et la classe MozillaWindowClass ?
Donc je suis au niveau des navigateurs
Maintenant je cherche a connaitre ce qu'il y a a l'intérieur de ces navigateurs et notamment si des toolbarres existent
Faut-il utiliser le même processus et avec quelle syntaxe ? car je pense que c'est une procédure autre que findwindow et qu'il faut partir du handle parent pour trouver les enfants. Ma logique est-elle bonne ?
fr3br0
Messages postés22Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention16 octobre 2007 10 oct. 2007 à 17:06
J'utilise actuellement une source trouvée ici qui permet de récupérer des infos là où le souris se trouve : cela focntionne très bien et permet d'avoir tout les handle de la fille jusqu'au bureau, ainsi que le titre
Cela me permet de rapidement vérifier les diffférences entre IE et firefox
Et c'est là que je suis devant un vide sidéral en terme de réponse : à priori le title n'est pas systématiquement renseigné sur les toolbarr (google semble le faire du moins sur IE). Ce qui veut dire que je n'ai pas la certitude de "retomber" sur la bonne barre lorsque j'utilise FindWindowEx.
Je pensais avoir pratiquement résolu mon problème ... mais non, ce n'est pas encore cela !
Mis à part le handle, y a t-il une autre information à disposition qui permette de dire : oui c'est la bonne barre d'outil
edurand1
Messages postés11Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention16 juin 20113 12 nov. 2007 à 11:22
Bonjour,
Je suis intéressé par l'idée suivante :
<cite>Sinon, tu peux connaître l'url de la page active, donc recharger cette
page dans ton exe, et analyser le code html ainsi obtenue.</cite>
Pouvez vous me donner une piste pour cette récupération d'info?
Aussi bien pour IE que FireFox.
Merci.
Un exemple pour IE7 :
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" ( _
ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Sub Form_Load()
Dim IEHWnd As Long
Dim WorkerWHWnd As Long
Dim ReBarWindow32HWnd As Long
Dim AddressBandRootHWnd As Long
Dim ComboBoxEx32HWnd As Long
Dim ComboBoxHWnd As Long
Dim EditHWnd As Long