Position d'une fenêtre en vb.net 2005

cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007 - 11 juin 2005 à 19:31
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007 - 12 juin 2005 à 11:18
Bonjour,
J'ai fait un petit programme pour remplacer le gestionaire de tâches de xp mais j'ai un problème avec l'api GetWindowRect.
Voici le code que j'ai mit :

<StructLayout(LayoutKind.Sequential)> Public Structure RECT


Public Top As Int32


Public Left_renommé As Int32


Public Bottom As Int32


Public Right_renommé As Int32


End Structure


<HR>


Public
Declare
Function GetWindowRect
Lib
"user32"
Alias
"GetWindowRect" (
ByVal hwnd
As Int32,
ByVal lpRect
As RECT)
As Int32


<HR>


Dim taille As New RECT


GetWindowRect(handle, taille)


Dim PosX As Long = taille.Left_renommé


Dim PosY As Long = taille.Top


Dim DimL As Long = taille.Right_renommé - taille.Left_renommé


Dim DimH As Long = taille.Bottom - taille.Top


txtX.Text = PosX


txtY.Text = PosY


txtH.Text = DimH


txtL.Text = DimL

Mon problème est que les valeurs PosX, PosY, DimH, DimL sont parfois négatives (quand la fenêtre est agrandie ou quand elle est réduite). J'aimerai avoir les vraies valeurs que la fenêtre soit agrandie ou réduite. Existe t-il une solution

Merci d'avance à celui qui me répondra.

lo4:)

10 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
11 juin 2005 à 20:53
salut,
et dans le .net, tu as essayé la serie des Me.desktoplocation et desktopbound ?.... (il doit y en avoir plusieurs dont un qui tient compte de la barre de tache).

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007
11 juin 2005 à 22:44
Salut
Je me suis mal expliqué : je voulais faire ca pour n'importe quelle fenêtre ouverte. Je refais un gestionnaire de tâches et je voulais obtenir les positions de n'importe quelle fenêtre ouverte.
Les Me.desktoplocation et Me.desktopBounds ne permettent de le faire que pour la fenêtre active de mon programme et non pas pour n'importe quelle fenêtre ouverte.
Merci quand même, ca m'aura appris quelque chose de plus aujourd'hui .

lo4
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 juin 2005 à 23:56
Tu es bien certain du "ByVal" pour le param RECT de GetWindowRect ???
Me semble bizzare vu que la fonction attend l'adresse de la structure pour la remplir.

ciao...
BruNews, MVP VC++
0
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007
12 juin 2005 à 00:06
Effectivement, ce n'est pas Byval. Avec Byval, j'avais 0 pour chaque valeur mais là, ce n'est pas étonnant. En fait, je me suis rendu compte de cette erreur avant d'envoyer le message et j'ai oublié de la corriger.
Mais mon problème est que les valeurs sont parfois négatives (lorsque la fenêtre est réduite ou agrandit).
Est-il possible d'avoir les renseignements sur la taille et la position bien que la fenêtre (choisit dans la liste des fenêtres ouvertes dans mon programme) soit réduite ou agrandit ?
J'avais essayé avec l'api GetWindowPlacement mais je n'avais pas tout les renseignements (il me manquait la position suivant l'axe X qui restait fixée à -1 et la hauteur de la fenêtre qui restait fixée elle à 117 ou quelque chose comme ca)

lo4
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 00:14
tes données sont pas dans l'ordre !









Public
Structure RECT
Public Left_renommé As Int32



Public Top As Int32


Public Right_renommé As Int32

Public Bottom As Int32




End Structure



Daniel
0
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007
12 juin 2005 à 10:11
Bonjour,
L'ordre des données n'y a rien changé. J'ai toujours des valeurs négatives sur la position pour les fenêtre réduites ou agandit. Pour les fenêtres agrandit, je peux comprendre les valeurs négatives comme -4, c'est la bordure de la fenêtre qui n'apparait pas quand la fenêtre est agrandit. Mais les valeurs de -32000 pour les fenêtres réduites, ca m'embête un peu surtout qu'avec l'api Getwindowplacement, hormis les valeurs fausses qui étaient fixes (la valeur sur l'axe X qui restait fixée à -1 et la hauteur à 117), les autres valeurs, je les avait parfaitement quelque soit l'état de la fenêtre.
Ce que je vais faire, c'est que je vais tester mon programme sur un autre pc voir si ca bug aussi ou si je vais être obligé de reformater encore une fois .

lo4
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 10:23
les négatifs c'est normal,

le -4 pour le .Top et le .Left ça correspond à la bordure de la fenêtre, elle est extérieure à l'écran en cas de Maximized.

pour le Minimized tu trouveras jamais d'autres positions que -32000,
c'est la façon pour Windows de dire que la fenêtre est cachée et ne
fait plus partie du bureau.

les tailles Width et Height de la fenêtre se calculent toujours normalement même avec les valeurs négatives.

ce qui donne par exemple pour un écran 1024x768 une taille Maxi de
1032x776 ou 1032x746 ça dépend de la position de la barre des tâches,
et pour le Mini c'est toujours 160x31.

l'ordre des données est bien sûr important, parce que tu as confondu le
Top avec le Left, et le Right avec le Bottom donc tes mesures Width et
Height étaient inversées.

Daniel
0
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007
12 juin 2005 à 10:41
Ok, c'est normal mais pourquoi j'ai certaines valeurs avec l'api getwindowplacement ?


Voici le code que j'ai mit :



Public
Declare
Function GetWindowPlacement
Lib
"user32" (
ByVal hwnd
As Int32,
ByRef lpwndpl
As WINDOWPLACEMENT)
As Int32




<HR>

Public
Structure RECT

Public Left_renommé
As Int32

Public Top
As Int32

Public Right_renommé
As Int32

Public Bottom
As Int32

End
Structure

<HR>
Dim Placement
As
New WINDOWPLACEMENT
GetWindowPlacement(handle, Placement)

Dim PosX
As
Long = Placement.rcNormalPosition.Left_renommé

Dim PosY
As
Long = Placement.rcNormalPosition.Top

Dim DimL
As
Long = Placement.rcNormalPosition.Right_renommé - Placement.rcNormalPosition.Left_renommé

Dim DimH
As
Long = Placement.rcNormalPosition.Bottom - Placement.rcNormalPosition.Top

txtX.Text = PosX 'position de la fenêtre selon l'axe X

txtY.Text = PosY 'position de la fenêtre selon l'axe Y

txtH.Text = DimH 'hauteur de la fenêtre

txtL.Text = DimL 'largeur de la fenêtre



Pourquoi la valeur de PosX reste fixée à -1, PosY est la valeur selon l'axe Y, DimH est la largeur et DimL est la hauteur

lo4
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 11:05
1 - il faut mettre la Longueur de la structure.



Placement.Length = Len(Placement)



2 - Les positions renvoyées seront les positions normales et non pas en minimisé

Daniel
0
cs_lo4 Messages postés 33 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 7 mai 2007
12 juin 2005 à 11:18
1 - il faut mettre la Longueur de la structure.

Placement.Length = Len(Placement)

Je veux bien mais à quoi ca sert et ou est-ce que je la met ???

2 - Les positions renvoyées seront les positions normales et non pas en minimisé

ok

lo4:)
0
Rejoignez-nous