Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~


Web Popup Killer

popupkiller.exe (le programme en VB6 natif) ~  popupkiller.zip (les sources du programme)

Si VB 6.0 n'est pas installé sur votre ordinateur, vous aurez peut-être besoin d'installer les Runtimes VB : DLL VB 6.0 DLL VB 6.0
Les deux DLL suivantes sont, en général, également nécessaires : VB6FR.DLL VB6FR.DLL ~  MSCOMCTL.OCX MSCOMCTL.OCX
(pour NT/2000, à copier dans WINNT\SYSTEM32 - pour 95/98/XP, à copier dans WINDOWS\SYSTEM)

Le programme est constitué d'une feuille et d'un module.

La feuille a cet aspect là :

  • 2 listes déroulantes, une pour afficher les titres et dimensions des fenêtres à surveiller et à éliminer, la seconde (non visible sur l'image) pour afficher la liste des fenêtres actuellement ouvertes,
  • 1 contrôle à onglets,
  • 5 boutons de contrôle,
  • 1 contrôle "IconTray" (non visible) pour éviter de surcharger la barre des tâches quand l'application est réduite,
  • 1 timer (non visible) pour le déclenchement des surveillances,
  • En vrac (non visibles sur l'image), répartis sur les onglets, 1 contrôle 'slider', 4 contrôles 'updown', ...
WebPopupKiller

Cette application bien pratique surveille en permanence les fenêtres ouvertes et elle ferme automatiquement celle dont le titre fait partie de sa liste. Concrètement, les fenêtres "Popup" qui apparaissent lors de votre navigation peuvent facilement être supprimées sans aucune intervention de votre part.
Pour bien fonctionner, il faut auparavant avoir saisi le titre des fenêtres génantes. La casse n'a pas d'importance, mais les espaces peuvent en avoir, c'est donc une partie sensible et il faut donc correctement respecter la saisie.

Ce programme est surtout intérressant pour la partie API qu'il utilise, car le reste est véritablement très facile à comprendre. Je ne m'attarde pas sur la gestion de la liste que j'ai voulu très simple, ainsi que sur la gestion du Timer. Celui-ci est réglé pour se déclencher toutes les secondes. Je n'ai pas jugé utile de le rendre configurable, mais si vous y tenez tant, ca devrait être à la portée de n'importe qui.
Pour la fermeture des fenêtres je m'en tiens donc au titre. C'est ce qu'il y a de plus simple et cela reste assez fiable. J'ai ajouté à cela une vérification de la taille de la fenêtre. Les dimensions maximales sont stockées sous forme de constantes et si une fenêtre correspond à un élément de la liste, on vérifie que sa taille est comprise dans les dimensions d'une fenêtre Popup. Cela afin d'éviter de fermer malencontreusement une réelle fenêtre de navigation qui aurait le même titre qu'une fenêtre Popup. J'aurai pu ici aussi laisser la possibilité à l'utilisateur de choisir lui même les dimensions critiques, mais, comme pour la remarque précédente, ca devrait être à la portée de n'importe qui.

Pour la partie API, j'utilise quatre fonctions. La première "EnumWindows" énumère la liste des fenêtres de premier niveau. Elle fonctionne avec un principe de rappel. C'est-à-dire qu'il faut lui donner l'adresse d'une fonction qui sera appelée après chacune des fenêtres parcourues. C'est dans cette fonction que l'on utilise les deux suivantes, "GetWindowText" et "GetWindowRect". L'une sert à récupérer le texte contenu dans la barre de titre de la fenêtre courante et l'autre à récupérer sa taille. A l'intérieur de cette fonction on construit une chaîne qui sera alors transformée en tableau pour pouvoir être plus facilement traité par la suite.
Enfin, à chaque déclenchement de la minuterie on regarde si dans toutes les fenêtres ouvertes une est contenue dans la liste de surveillance, et si c'est le cas, on fait alors appel à la dernière fonction API, "PostMessage", qui indique alors à la fenêtre en question de se fermer (avec WM_CLOSE).

Pour certains traitements j'utilise des fonctions bien pratique (Path, StringToFile, InList, ...) elles sont toutes présentes, avec bien d'autres, dans la rubrique 'Code' sur ce site.

Mise à jour du 30 septembre 2000:
Cette nouvelle version du programme présente des facilités d'utilisation. L'interface a été modifiée, et à présent plusieurs onglets servent à accéder aux différentes fonctions du programme. Les explications ci-dessus restent valables, et les ajouts ont de toute manière été commentés.
* Il n'est plus nécessaire de saisir le nom des fenêtres, le second onglet donne la liste des fenêtres ouvertes. Il faut alors juste sélectionner celle qu'on désire ajouter à la liste.
* Il est possible de définir la taille des fenêtres à supprimer. De plus, l'onglet 'Options' permet de définir une tolérance et ainsi de prendre une dimension plus ou moins large par rapport à celle choisie.
* L'intervalle de temps entre chaque surveillance peut être modifié via l'onglet 'Options'.
De manière générale, l'interface a été rendu plus sympathique, plus intuitive et plus ergonomique. Ces améliorations reprennent en partie celle qu'a apporté Fred (Active VB) au programme original. A noter, qu'il propose une version du programme sur son site... A voir.
Sur ce, bonne réflexion avec le code suivant...

frmPopupKiller.frm (. Afficher le code)

modKiller.bas (. Afficher le code)

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr