Récupérer et définir l'espace utilisable de l'écran (la taille des fenêtres maximisées et du bureau : inédit !)

Soyez le premier à donner votre avis sur cette source.

Vue 11 184 fois - Téléchargée 736 fois

Description

J'ai cherché sur tout le site et je n'ai pas trouvé comment il faut faire pour changer l'espace utilisable de l'écran : j'entend par cela le bureau et les dimensions des fenêtres maximisées.
Ce code me sert pour une barre d'outils qui se place à droite de l'écran, alors j'ai isolé le code et je vous ai fait une petite présentation avec des commentaires.

Source / Exemple :


Dans une form avec un bouton Command1 :
Public BLeft As Long
Public BRight As Long
Public BTop As Long
Public BBottom As Long

' Met les nouveaux paramêtres
Private Sub Form_Load()
    ' Toujours au premier plan
    SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    ' Sauvegarde les dimensions actuelles pour les rétablir après
    BLeft = Get_DimBureau(GDB_Left)
    BRight = Get_DimBureau(GDB_Right)
    BTop = Get_DimBureau(GDB_Top)
    BBottom = Get_DimBureau(GDB_Bottom)
    ' Positionne la fenêtre à droite
    Me.Top = BTop
    Me.Height = BBottom - BTop
    Me.Left = BRight - Me.Width
    ' Change les dimensions du bureau
    Set_DimBureau BLeft, BTop, Me.Left, BBottom
End Sub

' Remet les anciens paramêtres
Private Sub Command1_Click()
    Set_DimBureau BLeft, BTop, Screen.Width, BBottom
    End
End Sub

' Dans un module :

' Pour récupérer les dimensions utilisables du bureau
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As RECT, ByVal fuWinIni As Long) As Long
Public Const SPI_GETWORKAREA = 48
Private Const SPI_SETWORKAREA = 47
Private Const SPI_SENDCHANGE = 2

' Pour définir quelle dimension on veut récupérer
Public Const GDB_Left = 0
Public Const GDB_Top = 1
Public Const GDB_Right = 2
Public Const GDB_Bottom = 3

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

' Activer toujours la fenêtre au dessus des autres
Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2

' Le rafraichissement
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const HWND_BROADCAST = 65535
Public Const WM_WININICHANGE = 26
Public Const WM_SETTINGCHANGE = 26

' Récupère les dimensions utilisables du bureau
Public Function Get_DimBureau(ByVal Cote As Long) As Long
    Dim TRect As RECT
    If SystemParametersInfo(SPI_GETWORKAREA, 0, TRect, 0) Then
        Select Case Cote
            Case GDB_Left
                Get_DimBureau = TRect.Left * Screen.TwipsPerPixelX
            Case GDB_Top
                Get_DimBureau = TRect.Top * Screen.TwipsPerPixelY
            Case GDB_Right
                Get_DimBureau = TRect.Right * Screen.TwipsPerPixelX
            Case GDB_Bottom
                Get_DimBureau = TRect.Bottom * Screen.TwipsPerPixelY
        End Select
    End If
End Function

' Change les dimensions de la zone utilisable du bureau
Public Function Set_DimBureau(Left As Long, Top As Long, Right As Long, Bottom As Long)
    On Error Resume Next
    Dim TRect As RECT
    TRect.Left = Left / Screen.TwipsPerPixelX
    TRect.Top = Top / Screen.TwipsPerPixelY
    TRect.Right = Right / Screen.TwipsPerPixelX
    TRect.Bottom = Bottom / Screen.TwipsPerPixelY
    Set_DimBureau = SystemParametersInfo(SPI_SETWORKAREA, 0, TRect, SPI_SENDCHANGE)
    ' Rafraichit le bureau
    SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, 0
    SendMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function

Conclusion :


Je vous ai mis un zip, c'est assez joli et chez moi ça marche nickel

Pensez bien à quitter en cliquant sur le bouton !!!!

voilà j'espère que ça vous servira !

@ +
MadMatt

Source mise à jour SP1 lol

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Elangel
Messages postés
4
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
30 juin 2008
-
bonjour,

j'aimerais bien pouvoir mettre cette barre en bas et pas à droite, qu'il n'y est pas le bouton quitter, qu'elle soit transparente, et qu'elle fasse 90 pixels de hauteur sur 1400 de large
Je vous solicite pour cela car je n'arrive pas à le faire moi même.
Si vous pouviez m'envoyer le fichier modifier à: thebossrf@hotmail.fr
merci beaucoup
djflo99
Messages postés
14
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
3 août 2005
-
Merci pour votre source, c'est vraiment ce que je cherche ça fait lengtemps, car j'ai crée une application qui diffuse de la pub comme (EuroBarre), mais j'ai un tout petit question (dinge) a vous :

c'est comment faire pour mette ce barre en haut de l'écran, et pas a droite ?

et merci d'avance
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
ça marche pas toujours (ça dépend bcp de l'humeur du pc) mais au moins lorsqu'on démaximise puis remaximise une fenetre après modification de l'espace de travail, les nouvelles dimensions sont prises en compte.
Sans les sendmessages les nouvelles dimensions ne sont pas prises en compte...
Et puis je crois que ça ne vient pas du code car avec Winamp par exemple j'avais le meme problème... Donc la faute à Windows !!! lol
Pym Corp
Messages postés
167
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
18 novembre 2007
-
Chez moi ça ne marche pas le rafraichissement (Win XP)
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
re-source mise à jour, pas mal de mois plus tard.
Merci à BruNews pour la technique, il suffit d'un sendmessage pour rafraichir la taille de toutes les fenetres maximisées.
J'ai ajouté en + la position de la fenetre toujours au premier plan.

Profitez bien il n'y a plus de bugs, trop de bonheur!!

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.