Détection browser au 1er plan [Résolu]

Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
- - Dernière réponse : Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 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

Merci de vos réponses
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
3
Merci
Heu, non c'est du vieux vb ca.

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)

__________
Kenji
(
Nouveau forum VBA/Office

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
3
Merci
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.

__________
Kenji
(
Nouveau forum VBA/Office

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
3
Merci
Salut,

Ta logique est bonne, l'api FindWindowEx répond à ta question.
hwnd2 = FindWindowEx(IEHwnd, &H0, "class", vbnullstring)

Pour ton MozillaWindowClass, je ne sais pas. Je n'utilise pas Mozilla.

__________
Kenji
(
Nouveau forum VBA/Office

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
3
Merci
C'est un outils normalement livré avec Visual Studio.
Tu devrais le trouver dans les Tools du répertoire de Visual Studio.





__________
Kenji

(


Nouveau forum VBA/Office

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
0
Merci
Salut,

Utilise l'api GetActiveWindow pour récupérer la fenêtre active et FindWindow pour récupérer ton navigateur.

__________
Kenji
(
Nouveau forum VBA/Office
Commenter la réponse de Charles Racaud
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
Bonjour,

Merci beaucoup pour la réponse rapide

J'ai effectué quelques recherche sur google et ai trouvé ceci :
http://support.microsoft.com/kb/455032/fr

Est-ce toujours d'actualité avec les dernières versions de VB ?
Commenter la réponse de fr3br0
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
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
Commenter la réponse de fr3br0
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
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 ?
Commenter la réponse de fr3br0
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
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
Commenter la réponse de fr3br0
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
0
Merci
Salut,

Utilise la spy++. Tu pourras beaucoup mieux voir.
Elle liste toutes les handles et à qui ils appartiennent.
C'est un outils très pratique.

__________
Kenji
(
Nouveau forum VBA/Office
Commenter la réponse de Charles Racaud
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
OK mais ... où se trouve la spy++ ?
Commenter la réponse de fr3br0
Messages postés
22
Date d'inscription
jeudi 16 février 2006
Dernière intervention
16 octobre 2007
0
Merci
Merci je l'ai trouvé sur le CD d'installation.

Bien quant à mon projet, j'ai décidé de me faire épaulé et de monayer la chose car seul, je n'y arrive(rai) pas.

Dans cette optique j'aurais besoin d'adresse de freelance (il doit y en avoir tout plein sur le forum, ouimézou? )

Je ne m'étend pas trop ici au niveau CDC car ce n'est pas le bon forum

Voila.

Je précise que je suis professionnel

Merci d'avance
Commenter la réponse de fr3br0
Messages postés
11
Date d'inscription
jeudi 28 août 2003
Dernière intervention
16 juin 2011
0
Merci
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.
Commenter la réponse de edurand1
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
0
Merci
Salut,

La piste comme je l'ai dit, la spy++
http://logiciel.codes-sources.com/logiciels/Spy-174.aspx

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
  
  IEHWnd = FindWindow("IEFrame", vbNullString)
  WorkerWHWnd = FindWindowEx(IEHWnd, 0&, "WorkerW", vbNullString)
  ReBarWindow32HWnd = FindWindowEx(WorkerWHWnd, 0&, "ReBarWindow32", vbNullString)
  AddressBandRootHWnd = FindWindowEx(ReBarWindow32HWnd, 0&, "Address Band Root", vbNullString)
  ComboBoxEx32HWnd = FindWindowEx(AddressBandRootHWnd, 0&, "ComboBoxEx32", vbNullString)
  ComboBoxHWnd = FindWindowEx(ComboBoxEx32HWnd, 0&, "ComboBox", vbNullString)
  EditHWnd = FindWindowEx(ComboBoxHWnd, 0&, "Edit", vbNullString)
  
  Dim AddressLenght As Long, Address As String
  AddressLenght = SendMessage(ComboBoxEx32HWnd, WM_GETTEXTLENGTH, 0&, 0&) + 1
  Address = Space$(AddressLenght)
  AddressLenght = SendMessage(ComboBoxEx32HWnd, WM_GETTEXT, AddressLenght, _
    ByVal StrPtr(Address))
  Address = Left$(Address, AddressLenght)
  
  
  MsgBox Address
End Sub, ----
(Coloration syntaxique automatique par Kenji)

__________
Kenji
(
Nouveau forum VBA/Office
Commenter la réponse de Charles Racaud

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.