Bonjour,
Sauriez-vous par hasard s'il est possible de calculer la largeur de la barre des tâches de windows xp ?
Merci.
Bonjour,
Sauriez-vous par hasard s'il est possible de calculer la largeur de la barre des tâches de windows xp ?
Merci.
Sans indiscretion c'est pour quoi faire, parce que selon il y a peut-être d'autres solutions plus pratique.
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()); } }
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.
ixgh, je suis un pur c#piste, je connais rien au vb.netEnvoyé par hellspawn_ludo
mais bon je vais éssayer : ( ps. Pour les déclaration, j'ai utilisé pinvoke.net )
GetWindowRec
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 <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
FindWindow
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
pour le code, je te l'explique :
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
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 ...
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.
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 :
Screen.PrimaryScreen.WorkingArea() retourne un rectange correspondant à ton desktop (barre de tache exclue)
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
Ludovic,
Envoyé par hellspawn_ludoEnvoyé par LefortLudovic
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.
SmyleyEnvoyé par hellspawn_ludo
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 ...Envoyé par hellspawn_ludo
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.
Ca fonctionne nickel avec le workingarea.
A vous deux, messieurs LefortLudovic et Smiley, je vous remercie grandement pour votre aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager