Minwindow (gestionnaire de fenetre)

Soyez le premier à donner votre avis sur cette source.

Vue 7 705 fois - Téléchargée 1 003 fois

Description

Voici un programme que j’ai fait il y a quelque temps deja mais qui peu pourra surement depanner certain d’entre vous. Il permet lorsque vous minimiser une fenetre de la mettre automatiquement dans le systray. Il recupere automatiquement l’icône de l’application minimiser et sont titre, on y apprend aussi a lire et ecrire dans la base de registre et on retrouve aussi une classe pour gere facilement les icône dans le systray.

Voici les principale api utiliser :

EnumWindows
ShowWindow
SwitchToThisWindow
CloseWindow
SendMessage
GetWindow
GetWindowLong
GetWindowText
IsWindowVisible
IsIconic
SendMessageTimeout
GetClassLong

Pour finir j’utilise un module que j’aime particulierement pour animer mes fenetres : MovingEffects de MadM@tt (cf http://www.vbfrance.com/code.aspx?ID=24161)
Ainsi qu’un OCX pour rendre les menus plus attractif (XPMenu.ocx) mais celui ci je n’est plus le lien.

Source / Exemple :


'Extrait du Code Source

'Enumeration des fenêtres des applications actives (uniquement celles qui apparaissent dans la barre des taches)
Public Function EnumWindowCallBack(ByVal hwnd As Long, ByVal lParam As Long) As Long
 Dim lExStyle As Long, bHasNoOwner As Boolean
    
    If IsWindowVisible(hwnd) Then
        bHasNoOwner = (GetWindow(hwnd, GW_OWNER) = 0)
        lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE)
        
        If (((lExStyle And WS_EX_TOOLWINDOW) = 0) And bHasNoOwner) Or _
           ((lExStyle And WS_EX_APPWINDOW) And Not bHasNoOwner) Then
            
            ReDim Preserve vWindow(NbrWindow)
                vWindow(NbrWindow).hwnd = hwnd
                vWindow(NbrWindow).Iconic = IsIconic(hwnd) 'On regarde si WindowState de la fenetre = 1
                vWindow(NbrWindow).Titre = GetCaption(hwnd)
                
            NbrWindow = NbrWindow + 1
        End If
    End If

    EnumWindowCallBack = True
End Function

'recuperation du titre de la fenêtre qui lui est passée en parametre
Private Function GetCaption(ByVal hwnd As Long) As String
 Dim mCaption As String, lReturn As Long
 
    mCaption = Space(255)
    lReturn = GetWindowText(hwnd, mCaption, 255)
    GetCaption = Left(mCaption, lReturn)
End Function

'Recuperation du handle de l'icone de la fenetre qui lui est passée en parametre
Public Function GetIcon(hwnd As Long) As Long
    Call SendMessageTimeout(hwnd, WM_GETICON, 0, 0, 0, 1000, GetIcon)
    If Not CBool(GetIcon) Then GetIcon = GetClassLong(hwnd, GCL_HICONSM)
    If Not CBool(GetIcon) Then Call SendMessageTimeout(hwnd, WM_GETICON, 1, 0, 0, 1000, GetIcon)
    If Not CBool(GetIcon) Then GetIcon = GetClassLong(hwnd, GCL_HICON)
    If Not CBool(GetIcon) Then Call SendMessageTimeout(hwnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, GetIcon)
End Function

Conclusion :


Voilà donc il n’y a, a ma connaissance pas de bug mais bon si vous en trouver n’hesiter pas dite le.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Oaui super classe...9/10

-1 pour l'ocx XPMenu.ocx qui s'appel normalement HookMenu.ocx, maintenant j'ai 2 ocx enregistrée sur le PC au lieu d'une.

Bravo quand même.
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Azerty25>Si c'est l'histoire du menu, il existe une solution :
http://www.vbfrance.com/code.aspx?ID=18966
(oubliez les commentaires débiles et l'aspect "non fini" de la source...)


Le seul inconvénient de cette solution c'est que la fenêtre qui avait le focus le perd.

++
Moustachu
Messages postés
122
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 février 2011

DARKSIDIOUS-> pour se qui concerne le manifest, j'avais l'intansion a l'epoque de faire une interface beaucoup plus complex (je voulais faire un multi desktop, avec les icones dans le systray mais j'ai pas eu le temps)

MadM@tt-> Je n'arrive pas a trouver d'ou vien le probleme meme sans utiliser l'ocx j'ai se probleme de focus, si quelqu'un a une idée je suis preneur

klok-> je ne suis pas chez moi donc je ne peu pas essayer mais des que je peu je test

azerty25->c'est vrais j'ai fait aparaitre la fenetre d'option de façon arbitraire, dans se cas la je devrais aussi prandre en conte la posission de la barre.
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Oui c'est vrai, mais c'est pas propre à sa source, y'en a beaucoup qui ont ce problème et j'ai, si mes souvenirs sont bons, jamais rencontré la solution. Si qq1 l'a, n'hésitez pas ... ;)
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Même remarques que azerty, et ton menu ne disparaît si on a cliqué par erreur sur une icone.

9/10
Moustachu
Afficher les 12 commentaires

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.