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 Forms Discussion :

Largeur barre des tâches de windows xp


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut Largeur barre des tâches de windows xp
    Bonjour,

    Sauriez-vous par hasard s'il est possible de calculer la largeur de la barre des tâches de windows xp ?

    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Sans indiscretion c'est pour quoi faire, parce que selon il y a peut-être d'autres solutions plus pratique.

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    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
    62
    63
    64
    65
    66
    67
    68
    69
     
    [DllImport("user32.dll")]
            static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
     
            [Serializable, StructLayout(LayoutKind.Sequential)]
            public struct RECT
            {
                public int Left;
                public int Top;
                public int Right;
                public int Bottom;
     
                public RECT(int left_, int top_, int right_, int bottom_)
                {
                    Left = left_;
                    Top = top_;
                    Right = right_;
                    Bottom = bottom_;
                }
     
                public int Height { get { return Bottom - Top; } }
                public int Width { get { return Right - Left; } }
                public Size Size { get { return new Size(Width, Height); } }
     
                public Point Location { get { return new Point(Left, Top); } }
     
                // Handy method for converting to a System.Drawing.Rectangle
                public Rectangle ToRectangle()
                { return Rectangle.FromLTRB(Left, Top, Right, Bottom); }
     
                public static RECT FromRectangle(Rectangle rectangle)
                {
                    return new RECT(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom);
                }
     
                public override int GetHashCode()
                {
                    return Left ^ ((Top << 13) | (Top >> 0x13))
                      ^ ((Width << 0x1a) | (Width >> 6))
                      ^ ((Height << 7) | (Height >> 0x19));
                }
     
                #region Operator overloads
     
                public static implicit operator Rectangle(RECT rect)
                {
                    return rect.ToRectangle();
                }
     
                public static implicit operator RECT(Rectangle rect)
                {
                    return FromRectangle(rect);
                }
     
                #endregion
            }
     
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
     
            private void testButton1_Click(object sender, EventArgs e)
            {
                IntPtr taskBarHwnd = FindWindow("Shell_traywnd", "");
                RECT rect;
                if (GetWindowRect(taskBarHwnd, out rect))
                {
                    MessageBox.Show(rect.ToRectangle().ToString());
                }
            }

  4. #4
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Bonsoir,

    Feilong : Je développe, pour un ami, une appli qui change le wallpaper de windows mais le tut avec style. Le seul truc, c'est qu'il voudrait que la nouveau wallpaper à appliquer apparaisse progressivement (en jouant avec l'opacité allant de 0% à 100%). Ca, c'est super simple à faire, cependant, au moment ou l'image apparait, j'aimerais qu'elle ne prenne pas tout l'écran ainsi, si mon ami désiré cliquer sur le bouton démarrer, il le pourra. Vois-tu ce que je veux dire ?

    Pour te décrire la chose, la form apparaitra progressivement. Une fois à 100% de son opacité, la form disparaitra et grâce à une fonction API, l'image sera mis en véritable wallpaper windows.



    smyley : Je te remercie pour le code mais, sans vouloir t'embêter, aurais-tu la même chose en vb2005 et avec un petit peu de commentaire ?


    Merci à vous pour vos réponses.

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par hellspawn_ludo
    smyley : Je te remercie pour le code mais, sans vouloir t'embêter, aurais-tu la même chose en vb2005 et avec un petit peu de commentaire ?
    ixgh, je suis un pur c#piste, je connais rien au vb.net
    mais bon je vais éssayer : ( ps. Pour les déclaration, j'ai utilisé pinvoke.net )

    GetWindowRec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <DllImport("user32.dll")> _
    Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    End Function
     
    Public Overloads Declare Function GetWindowRect Lib "User32" Alias "GetWindowRect" (ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Int32
    Public Overloads Shared Function GetWindowRect(ByVal hWnd As IntPtr) As System.Drawing.Rectangle
         Dim r As New RECT
         GetWindowRect(hWnd, r)
         Return r.ToRectangle
    End Function
    Public Overloads Shared Function GetWindowRect(ByVal hWnd As Int32) As System.Drawing.Rectangle
         Return GetWindowRect(New IntPtr(hWnd))
    End Function
    RECT
    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
     
     <StructLayout(LayoutKind.Sequential)> _
        Public Structure RECT
            Public Left As Integer
            Public Top As Integer
            Public Right As Integer
            Public Bottom As Integer
     
            Public Sub New(ByVal pLeft As Integer, ByVal pTop As Integer, ByVal pRight As Integer, ByVal pBottom As Integer)
            left = pLeft
            top = pTop
            right = pRight
            bottom = pBottom
            End Sub
     
            Public ReadOnly Property Height() As Integer
            Get
                Return Bottom - Top
            End Get
            End Property
            Public ReadOnly Property Width() As Integer
            Get
                Return Right - Left
            End Get
            End Property
            Public ReadOnly Property Location() As Point
            Get
                Return New Point(Left, Top)
            End Get
            End Property
            Public ReadOnly Property Size() As Size
            Get
                Return New Size(Width, Height)
            End Get
            End Property
     
            Public Function ToRectangle() As Rectangle
            Return Rectangle.FromLTRB(Me.Left, Me.Top, Me.Right, Me.Bottom)
            End Function
     
            Public Shared Function ToRectangle(ByVal sourceRect As RECT) As Rectangle
            Return Rectangle.FromLTRB(sourceRect.Left, sourceRect.Top, sourceRect.Right, sourceRect.Bottom)
            End Function
     
            Public Shared Function FromRectangle(ByVal r As Rectangle) As RECT
            Return New RECT(r.Left, r.Top, r.Right, r.Bottom)
            End Function
        End Structure
    FindWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
         ByVal lpClassName As String, _
         ByVal lpWindowName As String) As IntPtr
    End Function
    pour le code, je te l'explique :
    d'abord on appel FindWindow("Shell_traywnd",""); ceci afin de récuperer le Handle de la barre des taches et ensuite, on appel GetWindowRect pour obtenir les dimensions de celle-ci. En fait, c'est comme si tu avais un controle Shell_traywnd et que tu appellais sa propriété "Bounds", sauf que là on utilise les Api Windows ...

  6. #6
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    smyley,
    Un grand merci à toi pour m'avoir convertit le code en vb 2005.
    Je le testerai ce soir en rentrant du taf.


    Feilong,
    Je suis disponible pour une de tes solutions, si tu veux bien m'en faire part, je suis preneur.

    Merci.

  7. #7
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Tu veux juste récupérer la largeur de l'écran c'est ça ?
    Parceque alors mieux veut ne pas passer par du WIN32 mais utiliser le framework .net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim rect As Rectangle = Screen.PrimaryScreen.WorkingArea()
    Dim lg AsInteger = rect.Width
    
    Screen.PrimaryScreen.WorkingArea() retourne un rectange correspondant à ton desktop (barre de tache exclue)

    Ludovic,

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par hellspawn_ludo
    s'il est possible de calculer la largeur de la barre des tâches de windows xp ?
    Citation Envoyé par LefortLudovic
    Tu veux juste récupérer la largeur de l'écran c'est ça ?

  9. #9
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Smiley,

    J'ai un peu de mal à faire fonctionner ton code mais avec de la persévérance, j'y arriverai.


    LefortLudovic,

    J'essaie le code dès ce soir. Effectivement, je veux la largeur de l'écran.
    Mais comme j'arrivais seulement à avoir la taille complet (barre incluse), je cherchais à soustraire la largeur de la barre des tâches.

    Je vous tiens informé dès demain.

    Merci beaucoup pour votre aide.

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par hellspawn_ludo
    Smiley,
    Smyley

    Citation Envoyé par hellspawn_ludo
    Effectivement, je veux la largeur de l'écran.
    Ah ben dans ce cas ça change tout, Ludo il a raison et sa solution est plus rapide. Mon code te permet d'obtenir les dimensions de la barre des taches ...

  11. #11
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Smyley,

    C'est pas grave, j'ai dû mal formuler ce que je désirais. Désolé.
    Ceci étant ton code peut toujours servir donc je maintiens ce que je disais, je persévérerai.

    Merci pour m'avoir aider.

  12. #12
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Ca fonctionne nickel avec le workingarea.

    A vous deux, messieurs LefortLudovic et Smiley, je vous remercie grandement pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire disparaitre la barre des tâches dans Windows Mobile
    Par Cyrill26 dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 09/07/2008, 15h56
  2. Réponses: 10
    Dernier message: 18/12/2007, 10h00
  3. Propriétés de la barre des tâches de Windows
    Par ships'o crevettes dans le forum C#
    Réponses: 3
    Dernier message: 18/09/2007, 12h25
  4. Réponses: 6
    Dernier message: 15/05/2006, 12h50
  5. HAUTEUR de la barre des tâches de Windows ?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 13/12/2002, 12h43

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