Detection ouverture/fermeture de nouvelles fenêtre

LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009 - 19 avril 2004 à 14:36
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 6 avril 2007 à 03:00
Bonjour à tous, Qui peut me dire comment capter l'ouverture ou la fermeture d'une fenêtre sous windows :question)
Je souhaite lister les fenêtres ouvertes et les ajouter à une liste au fur et à mesure de leur création ou les enlever de cette liste quand elles sont fermées. :big)
Y a-t-il un moyen SIMPLE pour y arriver? Merci d'avance
Le Desassembleur
:)

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 avril 2004 à 15:02
Pour moi, il te faut utiliser un Hook de type WH_CBT

Il sert a ca, en plus !

Je te laisse fouiner un peu sur le net, si ce n'est déjà fait.

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 avril 2004 à 15:42
Salut Renfield,
faut aussi preciser que ce hook ne peut se trouver ailleurs que dans une DLL et que VB ne peut pas en produire.

ciao...
BruNews, Admin CS, MVP Visual C++
0
LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009
19 avril 2004 à 15:56
OK OK

Mais là je sèche... Pas plus d'indices ? ;)

Merci d'avance !

LeDesassembleur
:)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 avril 2004 à 15:58
ben si, goto cppfrance.com

ciao...
BruNews, Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009
19 avril 2004 à 16:46
Mouais... là je fait fausse route (en tout cas, ca ne m'inspire pas.)
alors question :

Je pars sur cette piste

Je peux avoir des infos sur une fenetre via :

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

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Mais comment puis-je savoir laquelle de deux fenetres d'une même application est la plus ancienne?
(exemple, je detecte deux fenetres de IE (donc nom de classe = IEframe pour les deux fenetres)

Merci d'avance ;-)

J'arreterai de vous embeter apres ça ;-)

:)
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
19 avril 2004 à 16:56
Voila une solution pour les lister les app ouverte :

'Dans un module

Dim Temp As String
'Add this code to a module
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret + 1
    If sSave <> vbNullString And IsWindowVisible(hwnd) Then Temp = Temp & sSave & vbCrLf
    'continue enumeration
    EnumWindowsProc = True
End Function
Public Function App_Ouverte()
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
App_Ouverte = Temp
End Function


ensuite de ton form :

MsgBox App_Ouverte


Si tu exploiter les noms des applis il suffit de faire un split :
Dim Tableau() As String
Tableau = Split(App_Ouverte, vbCrLf)
For i = 0 To UBound(Tableau)
List1.AddItem Tableau(i) 'affichage dans un listbox
Next i

avec ce code tu peu facilement detecter les nv fenetre creer depuis le lancement de ton prog, ou mm celle qui se ferme

exemple :

Dim ouverte() As String
Private Sub Form_Load()
ouverte = Split(App_Ouverte, vbCrLf)
End Sub

Private Sub Timer1_Timer()
'mise a jour de list1 selon la liste de depart des appli ouverte
List1.Clear
Dim temp() As String
Erase temp
temp = Split(App_Ouverte, vbCrLf)
Dim Existe As Boolean
Existe = False
    For i = 0 To UBound(temp)
        For a = 0 To UBound(ouverte)            If temp(i) ouverte(a) Then Existe True: Exit For
        Next a
    If Not Existe Then List1.AddItem temp(i)
    Existe = False
    Next i
End Sub


Voila si tu ouvre un prog list1 affiche a chaque passage dans le timer ceux qui ne s'y trouve pas depuis le lancement de tobn prog!!

Voila j'espére que ça va t'aider!!

Pcpunch
0
LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009
19 avril 2004 à 17:01
Cool !
8-)
Merci, je devrais y arriver avec ça.
:big)

A PLus et encore merci à tous !

Le Desassembleur
:)
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
5 avril 2007 à 22:57
Bonjour,

Mais justement est-il possible d'éviter le bouclage du TIMER???

Cordialement
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 avril 2007 à 03:00
oui, en utilisant un hook WH_CBT ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous