Positionner une boite de dialogue

Résolu
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009 - 13 mai 2008 à 16:39
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009 - 19 mai 2008 à 09:48
Bonjour,
je souhaiterais savoir comment faire pour controler une boite de dialogue qui n'est pas la sienne mais qui est ouverte.
Mon besoin est de positionner la boite de dialogue à un position donnée.

Attention, la boite de dialogue n'appartient pas à mon exe. On dira que je veux positionner le bloc note en x=100 et y=110 à l'ouverture.

Avez vous une idée pour faire ça en C# ?

;lmkl

13 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
14 mai 2008 à 08:45
Avec FindWindow suivit de SetWindowPos

[ DllImport( "User32.dll", SetLastError = true ) ]
private static extern IntPtr FindWindow( string className, string windowName );

[ DllImport( "user32.dll", SetLastError = true ) ]
private static extern bool SetWindowPos
(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags
);

<hr />
-My Blog-
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 mai 2008 à 15:17
int HWND_TOP = 0
int SWP_SHOWWINDOW = 0x40;

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
3
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 mai 2008 à 17:33
Va falloir passer par de l'API Windows SendMessage. Je ne connais pas le message responsable du controle du postionnement de la fenêtre, d'autres experts te répondront peut être.
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
14 mai 2008 à 08:03
Merci de ta réponse bubbathemaster !
J'attend l'avis des experts.

;lmkl
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 mai 2008 à 09:33
hé hé... en lisant le début du thread, je pensais justement à FindWindow et SetWindowPos.
Mais Bidou est passé par là ;)

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
14 mai 2008 à 14:41
Super les mecs !!
Je test ça ce soir et si ça marche: champagne !!!!!!!!!!!!!!!!

;lmkl
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
14 mai 2008 à 14:53
Bon je viens de tester o taff j'ai pas pu resister et ça marche !!
MERCIIIIIIIIIIIIIIIIII

Par contre c'est quoi la correspondance des HWND_TOP

et
SWP_SHOWWINDOW

----------- mon code a la gros porc ---------
IntPtr

i;

IntPtr HWND_TOP =(
IntPtr)0;
uint SWP_SHOWWINDOW 0;i FindWindow(

null,
"E:\");SetWindowPos(i, HWND_TOP, 100, 100, 100, 100, SWP_SHOWWINDOW);

;lmkl
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
14 mai 2008 à 15:59
Merci Seb,

mais comment tu sais ça ? T'as trouvé dans un coin caché des MSDN ou tu l'as appris par coeur ? :)

;lmkl
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
14 mai 2008 à 16:06
Les constantes sont définies dans les headers (fichier .h).
Doit également se trouver sur MSDN, peut-être à partir d'ici:
http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

<hr />
-My Blog-
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 mai 2008 à 16:06
lol... non, j'utilise Reflector... une bonne partie des constantes sont inclues dans le framework...
sinon, il reste toujours Google...
et au pire : le fichier windows.h du SDK de windows.

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
18 mai 2008 à 21:23
Super toutes ces infos !! Ca marche bien.
Par contre j'aiemrais faire la meme chose mais dans l'autre sens et ça a pas l'air si évident !
Une idée ?

J'ai utilisé la fct "GetWindowPlacement" et ça a pas l'air de marcher correctement. La fct doit prendre en compte les barres des fenetres du coup je retombe pas sur les valeurs settés avec set windows position.

;lmkl
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
18 mai 2008 à 21:30
Bon j'ai trouvé alors je vais me repondre. Désolé c'est collé comme de la m**de mais je fait de mon mieux.










[DllImport("user32.dll")]


static
extern
bool
GetWindowRect(IntPtrhWnd, refRECTlpwndpl);







private


struct
RECT




{





public
int
left


;






public
int
top


;






public
int
right


;






public
int
bottom


;




}







i




= FindWindow(null, @"E:");



RECT
rr = newRECT();





GetWindowRect(i, refrr);










;lmkl
0
watoubilly Messages postés 36 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 21 mai 2009
19 mai 2008 à 09:48
Bonjour,
c'est encore moi. J'ai encore une question avec les SetWindowsPos...
En faite je tombe sur un problème d'asynchronisme. Je souhaite ouvrir un programme tiers (WMPlayer)
et quand je specifie un fichier à ouvrir, le logiciel met quelques secondes a s'afficher.

Donc moi je lance le processus WMPlayer avec un attribut (le nom du fichier à lire)
et apres je fait un SetWindowsPos mais la commande est pas vraiment prise en compte.
On dirait que c'est le Load de WMPlayer qui impose la position après mon SetWindowsPosition.

J'ai fait le test... en attendant qq secondes ça fonctionne.

Vous me direz bein attend 3 sec et c'est bon. Bein pas vraiment car certains fichiers mettent 1sec d'autres 10, c'est aléatoire
et c'est bete d'atttendre 10s si l'ouverture est instantannée.

Y'a t'il un moyen de savoir si la fenetre est visible pour l'utilisateur ?

Merci.

;lmkl
0
Rejoignez-nous