IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Espace utile du bureau


Sujet :

Windows

  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut Espace utile du bureau
    Bonjour,

    Afin de positionner correctement mes fenetres, je cherche à determiner "l'espace utile" du bureau.

    C'est à dire le rectangle le plus grand affichable à l'ecran (ou sur les ecran) et ne couvrant pas la barre des taches.

    Pour l'instant j'utilise ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		
    tempDC          = GetDC(NULL);
    largeurEcran    = GetDeviceCaps(tempDC,HORZRES);
    hauteurEcran    = GetDeviceCaps(tempDC,VERTRES);
    ReleaseDC(NULL, tempDC);
    Mais evidemment, ça ne prend pas en compte la presence et la positionde la barre des taches... Et pour le multi-ecran, je ne suis meme pas sur que ça marche du tout (pas testé)

    Existe-t-il une technique particuliere pour obtenir ces infos ?

  2. #2
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 758
    Points : 2 995
    Points
    2 995
    Par défaut
    Bonjour

    Il existe une fonction qui retourne la taille et la position de la Traybar

    Ci-après une fonction que j'ai développé en VB6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Public Type TaskBarInformation
       Left As Long  'Position par rapport au bord gauche de l'écran
       Top As Long   'Position par rapport au haut de l'écran
       Width As Long 'Largeur
       Height As Long 'Hauteur
       Position As tbPosition
    End Type
    
    Public Enum tbPosition
       tbBottom = 3
       tbLeft = 4
       tbRight = 2
       tbTop = 1
    End Enum
    
    
    Public Function GetTaskBarInformation() As TaskBarInformation
    
    Dim rctTemp As tRect
    Dim tskTemp As TaskBarInformation
    Dim intI As Integer, intJ As Integer
    Dim hwnd As Long
       
       With Screen
          intI = .Width \ (.TwipsPerPixelX * 2)
          intJ = .Height \ (.TwipsPerPixelY * 2)
       End With
       
       ' Récupère le handle de la barre des taches
       
       hwnd = FindWindow("Shell_traywnd", vbNullString)
       
       'Récupère le rectangle de la barre des taches
       
       GetWindowRect hwnd, rctTemp
       
       'Calcule les dimensions
       
       With tskTemp
       
          .Left = rctTemp.Left
          .Top = rctTemp.Top
          .Width = rctTemp.Right - rctTemp.Left
          .Height = rctTemp.Bottom - rctTemp.Top
          
          If .Top > intJ Then
             .Position = tbBottom ' Bottom
          ElseIf .Left > intI Then
             .Position = tbRight ' Right
         ElseIf .Top < intJ Then
             .Position = tbTop ' Top
         Else
             .Position = tbLeft ' Left
         End If
         
       End With
       
       GetTaskBarInformation = tskTemp
       
    End Function
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Hum, oui...

    Si quelqu'un a l'equivalent en C++ je suis preneur, j'ai jamais fais de VB.

    Et pour ce qui est du multi-ecran ?

    Les dimensions retournées tiennent compte de l'affichage elargi ? Ou uniquement de l'ecran en cours (je sais pas trop ce que ça veut dire...)

    Merci !

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    3
    Par défaut
    Fait un test sur GetWindowRect() de GetDesktopWindow(), ainsi qu'à SystemParametersInfo.

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Ces fonctions m'ont l'air pas mal du tout...

    Merci !

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    3
    Par défaut
    Méfies-toi tout de même des dimensions de GetDesktopWindow en multi-screen

  7. #7
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 758
    Points : 2 995
    Points
    2 995
    Par défaut
    Que l'on programme en VB, Delphi, C++, ... les API restent les mêmes non ?

    Avec les API que j'ai mentionné hier, une toute petite recherche sur Google m'a renseigné la page suivante http://www.codeproject.com/shell/trayposition.asp.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    3
    Par défaut
    Le probleme est que ce genre de bidouille n'est pas documenté et donc sans garantie de fonctionner a l'avenir. Il faudrait comparer les solutions sous Vista avec la barre des gadgets en plus...

  9. #9
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    cavo789 :

    Merci pour le lien, j'y ai trouvé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        APPBARDATA appBarData;
        appBarData.cbSize=sizeof(appBarData);
        if (SHAppBarMessage(ABM_GETTASKBARPOS,&appBarData))
        {
            // We know the edge the taskbar is connected to, so guess the rect of the
            // system tray. Use various fudge factor to make it look good
            switch(appBarData.uEdge)
            {
            case ABE_LEFT:
            case ABE_RIGHT:
                // We want to minimize to the bottom of the taskbar
                lprect->top    = appBarData.rc.bottom-100;
                lprect->bottom = appBarData.rc.bottom-16;
                lprect->left   = appBarData.rc.left;
                lprect->right  = appBarData.rc.right;
                break;
                
            case ABE_TOP:
            case ABE_BOTTOM:
                // We want to minimize to the right of the taskbar
                lprect->top    = appBarData.rc.top;
                lprect->bottom = appBarData.rc.bottom;
                lprect->left   = appBarData.rc.right-100;
                lprect->right  = appBarData.rc.right-16;
                break;
            }
            return;
        }
    Qui m'a l'air pas mal du tout....


    Aurelien.Regat-Barrel :
    Méfies-toi tout de même des dimensions de GetDesktopWindow en multi-screen
    Hum... tu peux m'en dire un peu plus ?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    3
    Par défaut
    Si tu as 2 écrans, avec des résolutions différentes, je crois que la taille du desktop est 2 fois celle du plus grand écran.

  11. #11
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Merci pour l'info !

Discussions similaires

  1. Raccourci sur le bureau
    Par senateur dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2002, 15h17
  2. changer l'image d'arrière plan du bureau
    Par etenclin dans le forum MFC
    Réponses: 7
    Dernier message: 22/08/2002, 15h54
  3. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo