Modification de la zone de travail

5/5 (14 avis)

Vue 4 870 fois - Téléchargée 362 fois

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

Ajouter un commentaire Commentaires
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
24 nov. 2004 à 19:22
n'hésitez pas à me soumettre vos commentaires..
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
24 nov. 2004 à 19:55
Pas mal, je met 9 car il serait bien de sauvegardr qq part (autre que dans une variable, un fichier par ex) les valeurs d'origines et de proposer de les restaurer.
Car apres mon test j'avais oublié quelles la valeur Height à l'origine, j'ai du faire un test sur un autre PC avec la meme resolution.

Mais ce la reste très interressant.
Il faut preciser que cela modifie la valeur pour TOUTES les fenetres actives.
Bonne prog
++
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
24 nov. 2004 à 20:35
source Mise A jour ;)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
24 nov. 2004 à 20:49
Salut

J'ai déjà mis une source qui fait la meme chose sur ce site et j'étais confronté à un problème : sur certains systèmes d'exploitation (dont XP j'en ai fait l'experience) quand tu change la zone utilisable de l'écran, toutes les fenetres maximisées ne sont pas modifiées, et meme si tu les démaximise puis tu les remaximises elle ne prendront pas compte des nouvelles dimensions, enfin bien chiant le problème.
J'ai essayé avec plein de prog différents, essayer de tout démaximiser et tout remaximiser, rien à faire, le problème reste.
En + j'ai reçu un mail de quelqu'un dont toutes les fenetres d'internet explorer restaient à l'ancienne taille, meme après reboot.

Donc je pense qu'il serait interressant avec la réédition de cette technique, de résoudre ce problème qui peut devenir bien chiant....

Mais bon c'est pas de ta faute, c'est celle d'XP j'ai le meme problème.

voilà j'espère que ça servira a améliorer cette source
@ +
MadMatt
cs_Cracker Messages postés 82 Date d'inscription dimanche 9 septembre 2001 Statut Membre Dernière intervention 21 août 2006
24 nov. 2004 à 21:06
personnellement je n'ai pas rencontré ce genre de probleme (je suis sur XP aussi) mais je n'ai pas fait énormément de test encore...

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.