Forum Clubic

Cherche une methode pour recupérer le titre de Fenetre Windows

Bonjour a tous, je m’y connais pas trop en VB, mais je cherche a faire un programme relativement compliqué:

Je cherche a faire un programme en Visual Basic 6.0, qui analyse le titre des fenetres Windows ouverte (Toutes les fenetres, pas uniquement les prog VB).
Le But final est de fermer automatiquement les fenetres comportant un certain titre prédéfinit.

Je pense que ca doit etre possible avec une API Windows et en identifiant chaque fenetre aprés avec leur HWND, mais je ne connais pas l’API qui pourrait m’aider … et je voit pas trop non plus comment fermer la fenetre une fois que je l’aurai identifié.

Un peu d’aide SVP!!

http://docvb.free.fr/apidetail.php?idapi=19

tout d’abord il te faut un utilitaire pour regarder les Handles, celui ci fera tres bien l’affaire
http://viking.dvc.edu/~tnelson/newton/WWiz97f.exe

Sur ce soft tu repere le titre exacte de la fenetre a fermer (normalement le meme que sous windows) et tu releve aussi le nom du bouton a activer pour fermer (par ex: “Button”,“Exit”)

pour la source voici les API

Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const VK_SPACE = &H20
Private Const WM_CHAR = &H102

Private Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As Any) As Long

Private Declare Function SetForegroundWindow Lib “user32” (ByVal hwnd As Long) 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 Declare Function PostMessage Lib “user32” Alias “PostMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Pour le code c’est ici dans une procedure comme form_load ou un bouton

Dim m_hWnd As Long 'handle de la fenetre a fermer
Dim m_ButtonHwnd As Long 'handle du bouton a activer

m_hWnd = FindWindow(vbNullString, “Titre de la fenetre”)'si m_hwnd=0 c’est que la fenetre n’as pas ete trouvé
m_ButtonHwnd = FindWindowEx(m_hWnd, ByVal 0&, “Button”, “Ouvrir”)
si ton bouton n’est pas reconnu essaye
'm_ButtonHwnd = FindWindowEx(m_hWnd, ByVal 0&, “Ouvrir”, vbnullstring).

'Call SetForegroundWindow(m_hWnd)'met la fenetre en avant-plan.Pas obligatoire

'Simule l’appui du bouton
Call PostMessage(m_ButtonHwnd, WM_KEYDOWN, VK_SPACE, 0)
Call PostMessage(m_ButtonHwnd, WM_KEYUP, VK_SPACE, 0)

bonne prog
@+
Metalcoder

aaaaaarrrrrrrggggggg !!! j’y arrive pas… :cry: :cry:

En fait, ce que je veux faire, c’est un programme qui ferme automatiquement des fenetres qui ont un nom précis (les fenetres généré par Windows lorsqu’ on recoit une commande “Net Send” a travers un réseau :stuck_out_tongue: ).

Toutes les fenetres “Net Send” ont pour titre : “Service Affichage des messages”, mais elle n’ont jamais le meme Handle (logique …). :cry:

Le probleme, c’est que je suis trop débutant pour me dépatouiller suffisament avec les API.
Ce que j’essai pour le moment:

  • Récupérér la liste des fenetres déja ouverte avec GetWindowsList()
  • Rechercher les fenetres avec le titre qu’ il faut
  • Recuperer toutes les infos sur ses fenetres
  • Tuer ses fenetres

Pourriez vous me donner des indications sur les API a utiliser et une méthode, parce que la, je commence a fatiguer

Essaye ca…

'dans un module ou dans les declaratitions general de la feuille
Private Const WM_CLOSE = &H10 'Pour fermer une fenetre
Private m_hWnd As Long 'handle

Private Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As Any) As Long 'API pour rechercher le handle d’une fenetre
Private Declare Function PostMessage Lib “user32” Alias “PostMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 'API pour envoyer une commande a une fenetre avec son Handle

'Un bouton pour lancer la procedure
Private Sub Command1_Click()
Do 'Boucle infini

m_hWnd = FindWindow(vbNullString, “Service Affichage des messages”)'Handle de la fenetre recherchée
Call PostMessage(m_hWnd, WM_CLOSE, 0, vbNull) 'fermeture de celle-ci
DoEvents 'Donne la main a Windows
Loop
End Sub

'Un bouton pour quitter
Private Sub Command2_Click()
End 'Quitte
End Sub

Voila, normalement ca devrait marcher

Bien sur il faut ameliorer tout ca, par exemple mettre le tout dans le systray de windows.

@+

Merci, ca fonctionne trés bien !! (enfin la paix quand je bosse sur un réseau … :super: )

Bonsoir

en vb.net ce sont les même fonctions ?

merci

Même réponse qu’ici.

Et puis surtout ramener un topic de 2003… faut le faire. Tu crois réellement qu’il va y avoir des réponses?

C’est le referencement du forum, les vieux topics sont mieux référencés, C’est sur ce genre de topic qu’on tombe quand on fait une recherche ds un moteur de recherche :neutre:

Vu que le moteur de recherche du forum est mort, je doute que la personne se soit tapé 300 pages pour tomber sur ces topics :smiley:

C’est super :x

il y a quand même pas mal de difference entre vb6 et vb.net sur ces API

tu as un example d’utilisation de PostMessage en vb.net ? il n’y en a pas sur l’autre

Autant couper le service xD

Mais lol ! C’est comme si tu me disait qu’il y a autant de différence entre l’html et le dhtml … si tu sais coder en .NET je ne vois absolument pas ce qui te rebute à utiliser les API (les imports = les declare de vb) mais comme je l’ai dit, il faut savoir coder en .NET …

Doucement Doucement !!

Je débute en vb.net … ( fin Janvier)

donc je tatonne …

Précise le la prochaine fois :wink: