Reduire des fenetres dans la barre de taches en vb.net

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 526 fois - Téléchargée 17 fois

Contenu du snippet

A compiler dans une application "console".
A partir les arguments passés en ligne de commande, les fenêtres, dont le titre contient l'un des arguments, sont réduites dans la barre de tâche.

Programme testé en VB2008 Express.
Il peut être compilé pour le Framework 2.0, 3.0 ou 3.5

Source / Exemple :


'===========================================================================================
'                               Projet : ReduitFenetre 
'                                Gis59 - 13/06/2008
'===========================================================================================
' Description : Réduction des fenetres passées en paramétre
' Paramtres   : Titres des fenetres
'===========================================================================================
' Modif       :
'===========================================================================================

Module Main

    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Integer, ByVal wCmd As Integer) As Integer
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer
    Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Integer) As Integer
    Private Declare Function GetDesktopWindow Lib "user32" () As Integer
    Public Declare Function CloseWindow Lib "user32" (ByVal hWnd As Integer) As Integer

    <VBFixedString(255)> Dim TitreFenetre As String

    Const GW_HWNDFIRST As Integer = 0
    Const GW_HWNDLAST As Integer = 1
    Const GW_HWNDNEXT As Integer = 2
    Const GW_HWNDPREV As Integer = 3
    Const GW_OWNER As Integer = 4
    Const GW_CHILD As Integer = 5

    Sub Main()
        Dim blnRet As Boolean = False
        'Test si "?" dans les arguments
        blnRet = TestSiHelp()
        'Cherche les fenetres et fait la réduction  si pas demande d'aide
        If Not blnRet Then Call ChercheEtReduit()

    End Sub

    '---------------------------------------------------------------------------------------
    ' Sub           : ChercheEtReduit
    ' Description   : Parcout la liste des fenêtres active et réduit les fenêtres dans le nom
    '                   contient un des strings passées en argument au programme.
    '---------------------------------------------------------------------------------------

    Sub ChercheEtReduit()
        Dim hWnd As Integer
        Dim argument As String
        Dim Titre As String
        Dim iNbCar As Integer

        'Recupere le Handle du bureau
        Dim hWndDesktop = GetDesktopWindow()
        'Recupere le Handle de la 1ere Fenetre fille
        hWnd = GetWindow(hWndDesktop, GW_CHILD)

        'Boucle sur toute les fenetres filles
        Do While (Not IsNothing(hWnd)) AndAlso (hWnd <> 0)
            'Lecture du titre
            TitreFenetre = New String(Chr(0), 255)
            iNbCar = GetWindowText(hWnd, TitreFenetre, 255)
            If iNbCar > 0 Then
                'If TitreFenetre <> New String(Chr(0), 255) Then
                If IsWindowVisible(hWnd) = 1 Then
                    Titre = Microsoft.VisualBasic.Left(TitreFenetre, iNbCar)
                    'Parcourt les argument pour chercher une concordance avce le titre
                    For Each argument In My.Application.CommandLineArgs
                        If Titre.ToUpper.Contains(argument.ToUpper) Then
                            Console.WriteLine("Fenetre à réduire : " & Titre.ToString)
                            'Réduit la fenetre si concordance
                            CloseWindow(hWnd)
                        End If
                    Next
                End If
            End If
            'Recupere le Handle de la Fenetre fille suivante
            hWnd = GetWindow(hWnd, GW_HWNDNEXT)
        Loop
    End Sub

    '---------------------------------------------------------------------------------------
    ' Function      : TestSiHelp
    ' Description   : Si un des arguments contient "?", affichage de l'aide
    ' Retour        : True si demande d'aide, sinon false                  
    '---------------------------------------------------------------------------------------
    Function TestSiHelp() As Boolean
        Dim blnDemandeHelp As Boolean = False
        Dim argument As String

        If My.Application.CommandLineArgs.Count = 0 Then
            blnDemandeHelp = True
        Else
            'Parcoutr les Arguments pour recherche "?"
            For Each argument In My.Application.CommandLineArgs
                If argument.Contains("?") Then
                    blnDemandeHelp = True
                    Exit For
                End If
            Next
        End If

        'Affiche l'aide
        If blnDemandeHelp Then
            Console.WriteLine("")
            Console.WriteLine("=======================================================================")
            Console.WriteLine("                     ReduitFenetre.exe")
            Console.WriteLine("=======================================================================")
            Console.WriteLine("Decription : Réduit dans la barre de tache")
            Console.WriteLine("             les fenetres passées en argument.")
            Console.WriteLine("")
            Console.WriteLine("Syntaxe : ReduitFenetre.exe arg1 [arg2 .... argx] ")
            Console.WriteLine("   arg1 à argx : titre (ou partie du titre) des fenetres a reduire.")
            Console.WriteLine("")
            Console.WriteLine("Exemple : ReduitFenetre.exe ""cmd.exe""")
            Console.WriteLine("  --> Reduction de toutes les fenetres dant le titre contient cmd.exe")
            Console.WriteLine("")

        End If

        TestSiHelp = blnDemandeHelp
    End Function

End Module

A voir également

Ajouter un commentaire

Commentaires

Revelc
Messages postés
4
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
10 août 2008
-
Oui c'est vrai qu'il y a de la nostalgie vb6 dans ton code. Mais merci quand même , c'était exactement ce que je cherché :)

A+
PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29 -
salut,
"Microsoft.VisualBasic.Left"
umm, vraiment pas top en VB2008 çà... substring?

"Dim hWnd As Integer"
les handles ne doivent pas être en IntPtr?

"TestSiHelp = blnDemandeHelp"
RETURN blnDemandeHelp

etc..., ton code est très "à la VB6"
bon courage ;)
mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16 -
Salut,

bien que tu l'aies précisé dans la catégorie de ta source, tu as dû oublier de cocher quelque part 'Source .Net" en déposant ta source. Essaie de voir si tu peux mettre à jour ;)

Bonne continuation

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.