Modification de la zone de travail

Description

Quand on maximise une fenetre (de n'importe quelle application), celle-ci s'agrandit de façon a occuper tout l'écran, sans la barre des taches...
Pour forcer les fenetres à n'occuper qu'une partie de l'écran, il faut modifier des données via une api que j'ai eu du mal à trouver !!
Il est important de préciser que les modifications sont valables pour toutes les fenetres, puisqu'elles se basent sur ces données pour connaitre la taille à prendre...

Source / Exemple :


'Il faut, 4 textbox (Text1, Text2, Text3, Text4) et 2 CommandButton (Command1, Command2)

Option Explicit
    'déclaration de l'api et de ses constantes
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
    Const SPI_GETWORKAREA = 48
    Const SPI_SETWORKAREA = 47
    
    'déclaration de 2 variables types qui récupereront la taille de la zone de travail
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    Dim RCold As RECT
    Dim RCnew As RECT

Private Sub Command1_Click()
    'on récupere la taille de la zone de travail et si l'api bug (<>1), on le signal
    If SystemParametersInfo(SPI_GETWORKAREA, vbNull, RCold, 0) = 1 Then
        With RCold
            Text1.Text = .Left
            Text2.Text = .Top
            Text3.Text = .Right
            Text4.Text = .Bottom
        End With
    Else
        MsgBox "Une erreur est survenue lors de la récupération des données !", vbOKOnly + vbMsgBoxSetForeground + vbCritical, "Erreur"
    End If
End Sub

Private Sub Command2_Click()
    'on modifie la taille de la zone de travail apres verifier la requete de l'utilisateur, en cas "d'accident" !!
    If MsgBox("Etes-vous sur de vouloir modifier la zone de travail ??" & vbCrLf & "Une mauvaise manipulation peut entrainer de graves conséquences !!", vbQuestion + vbYesNo + vbMsgBoxSetForeground, "Etes-vous sur ?") = vbYes Then
        With RCnew
            .Left = Text1.Text
            .Top = Text2.Text
            .Right = Text3.Text
            .Bottom = Text4.Text
        End With
        Call SystemParametersInfo(SPI_SETWORKAREA, vbNull, RCnew, 0)
    End If
End Sub

Private Sub Form_Load()
    Command1_Click
End Sub

Conclusion :


Je ne pense pas qu'il y aura de suite à ce projet, sauf bien sûr pour corriger d'éventuels bugs !

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.