Position d'un controle d'une autre aplication [Résolu]

Signaler
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Salut!!
Comment connaitre la position d'un controle (top,left) d'une autre aplication?

16 réponses

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
graphics temp = graphics.FromHwnd(TonHwnd);
temp.Region.X, etc...
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Le premier paramètre c'est un IntPtr càd 32 bits ou 64 bits selon la platforme, le deuxième paramètre est une structure RECT passée par référence.

[ DllImport( "User32.dll", SetLastError = true ) ]
private static extern bool GetWindowRect( IntPtr hWnd, out RECT rect );


[ StructLayout( LayoutKind.Sequential ) ]
public struct RECT
{
  public int Left;
  public int Top;
  public int Right;
  public int Bottom;
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Montre ton code alors.. parce que dans l'exemple que tu as donné au dessus tu fais un cast vers un long !?? et puis ne passe pas le second paramètre par référence !??
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
Control.FromHandle(IntPtr hWnd);

vu que tu as déjà le handle....
Messages postés
19
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
27 octobre 2006

Salut,

et pourquoi pas créer un tube de communication (c'est sûrement pas comme ça qu'on dit!) entre les deux applis : l'une écoute et l'autre émet régulièrement la position du contrôle ?
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

Pour ce qui est du tube de communication cette idée semble interessante ( bien que j'ai pas mal avancé en paasant par la technique précedente) et par quelle moyen peut on mettre cette technique en application.

Le  Control.FromHandle(IntPtr hWnd) fonctionne lorsque le handle (en parametre ) et celui de mon application mais pas pour un handle d'une autre application!!!??
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
au fait, merci daccepter la réponse de lautre post, (et de prendre lhabitude), cest tjs plus agréable pour les autres (que ce soit si qqun est confronté au meme probleme et fait une recherche, pour ceux qui répondent et qui peuvent savoir qu'ils nont pas a retourner sur ce post, etc...)
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

Il n'existe pas de menbres nommé region pour la classe graphics!!!!!
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
msdn? a partir du graphics tu devrais pôuvoir faire ce que tu veux....
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

Escuse moi d'insisté!!!!
Mais la methode que tu m'as indiquer me renvoie tjrs la meme valeur que ce soit pour (X Y) et quelque soit le handle selectionné voici mon code: 

System.IntPtr intHwndSelin = new System.IntPtr(intHwndSel);
Graphics Temp=Graphics.FromHwnd(intHwndSelin);
textBox1.Text = Temp.ClipBounds.X.ToString();
textBox1.Text = textBox1.Text + " " + Temp.ClipBounds.Y.ToString();


 
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Salut tu peux par exemple récupérer le handle de la fenêtre principal avec FindWindow, puis le handle du contrôle avec FindWindowEx et la position et taille du contrôle avec GetWindowRect.
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

j ai essayer ca

long L;
System.IntPtr intHwndSelin = new System.IntPtr(intHwndSel);
L=GetWindowRect((long)intHwndSel, Pt);
textBox1.Text = Pt.Left.ToString()+" "+ Pt.Top.ToString();

Mais j'ai l'exception accesviolationexception à la ligne L=GetWindowRect((long)intHwndSel, Pt); quelqu 'un a une idée
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

C exactement ce que je fais mais l'exception accesviolationexception persiste
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

tu as raison c mon deuxieme  param qui n'allait pa!!!!!!!!!!!!!!

merci
Messages postés
96
Date d'inscription
mercredi 26 mai 2010
Statut
Membre
Dernière intervention
27 mai 2010

une autre question tant que j'y suis comment puis je recuperer le nom d'un controle d'une autre appli?
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Mais quel nom ? Il y a bien GetClassName pour retrouver le nom de la classe du contrôle.