Comment mettre en valeur un splash screen ! (minimise toutes les fenetres et cache les icones du bureau)

Description

Bonjour à tous,

voilà c'est un code tout simple que l'on ma demandé de réaliser pour aider quelqu'un, donc j'en fait profiter tout le monde car je ne me souviens pas en avoir déjà vu.
ça permet de faire des splash screen (définition : ce sont les petites fenetres qui s'affichent au centre de l'écran pendant le chargement d'un logiciel) et donc de mettre en valeur ces splash screen en les affichant directement sur le fond d'écran.
Pour ça, on minimise toutes les fenetres ouvertes et on cache les icones du bureau, ça nous donne donc notre splash screen directement sur notre fond d'écran.

C'est assez joli mais selon le nombre de fenetres ça peut etre long à minimiser tout.

(dsl pas de capture mon fond d'écran est un peu trop "perso" ;)

Source / Exemple :


Attribute VB_Name = "modWindows"
Option Explicit

' Pour la liste des tâches actives
Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDNEXT = 2
' Le texte de la fenêtre
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
' Fenêtre visible ou pas
Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
' Permet de récupérer le nom de classe de la fenêtre hWnd
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
' Si une fenêtre est en icone
Public Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'renvoie la fenêtre propriétaire de la fenêtre
Public Const GWL_HWNDPARENT As Long = -8
Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Public Const SW_MINIMIZE = 6
Public Const SW_RESTORE = 9
Public Declare Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
' Permet de trouver le handle de la fenêtre recherchée
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As Long) As Long
'Pour les icônes du bureau
Public Const ICON_SHOW = &H5
Public Const ICON_HIDE = &H0

' La liste des fenetres à réduire
Public Windows() As Long

' Minimise toutes les fenetres
Public Function MinimizeAllWindows()
    Dim Currwnd            As Long
    Dim Length             As Long
    Dim NomTache           As String
    Dim T                  As Long

    ReDim Windows(0)
    T = 0
    
    Currwnd = GetWindow(frmMain.hWnd, GW_HWNDFIRST)
    While Currwnd <> 0
        ' Si c'est une tache (apparait dans la barre des taches)
        ' et qu'elle n'est pas minimisée
        If IsTask(Currwnd) = True And IsIconic(Currwnd) = 0 And Not Currwnd = frmMain.hWnd Then
            ReDim Preserve Windows(T)
            Windows(T) = Currwnd
            T = T + 1
            ' On la minimise , SW_MINIMIZE
            CloseWindow Currwnd
        End If
        Currwnd = GetWindow(Currwnd, GW_HWNDNEXT)
    Wend
    ' cache les icones du bureau
    Currwnd = FindWindowEx(0&, 0&, "Progman", 0)
    ShowWindow Currwnd, ICON_HIDE
End Function

' Maximise toutes les fenetres
Public Function RestoreAllWindows()
    Dim Currwnd As Long
    Dim T As Long
    ' Montre les icones du bureau
    Currwnd = FindWindowEx(0&, 0&, "Progman", 0)
    ShowWindow Currwnd, ICON_SHOW
    T = 0
    If UBound(Windows) = 0 Then Exit Function
    For T = 0 To UBound(Windows)
        ' On la restore
        ShowWindow Windows(T), SW_RESTORE
    Next
End Function

' Renvoie TRUE si la fenêtre est une tâche (apparait dans le Ctrl Alt Suppr)
' Critères :    - Visible
'               - Avoir un titre
'               - Pas de parent
'               - Pas de propriétaire
'               - ça ne doit pas etre le TaskManager (Progman)
Private Function IsTask(hWnd As Long) As Boolean
    IsTask = False
    'le fenêtre doit être visible
    If IsWindowVisible(hWnd) And GetParent(hWnd) = 0 And GetWindowLong(hWnd, GWL_HWNDPARENT) = 0 And Not GetWindowTextLength(hWnd) = 0 Then
        ' Vérifie que ce n'est pas le TaskManager
        If GetWindowClass(hWnd) <> "Progman" Then
            IsTask = True
        End If
    End If
End Function

' Renvoie le nom de la classe de la fenêtre
Private Function GetWindowClass(hWnd As Long) As String
    ' On prépare la chaine de caractère avec 255 espaces
    GetWindowClass = Space(255)
    ' On récuère le nom de la classe
    GetClassName hWnd, GetWindowClass, 255
    ' On efface les caractères vides
    GetWindowClass = Left(GetWindowClass, InStr(GetWindowClass, vbNullChar) - 1)
End Function

Conclusion :


Remarque :
Perso je ne supporterais pas un prog qui ferait ça parce que je trouverais cela très chiant et totalement inutile car on le voit assez son splash screen, mais ce n'est pas à moi de décider de l'utilisation de ce code donc ne me reprochez pas que ce code va faire plus *** les utilisateurs qu'autre chose ;)

Remarque 2 :
J'ai codé ça un peu à la bourrin, si vous ne comprenez pas un passage demandez moi je suis a votre disposition

En esperant que ça vous serve ;)
Ciao
MadMatt

Codes Sources

A voir également

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.