Positionner une boite de dialogue [Résolu]

Signaler
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009
-
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009
-
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

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
int HWND_TOP = 0
int SWP_SHOWWINDOW = 0x40;

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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.
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

Merci de ta réponse bubbathemaster !
J'attend l'avis des experts.

;lmkl
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

Super les mecs !!
Je test ça ce soir et si ça marche: champagne !!!!!!!!!!!!!!!!

;lmkl
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

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
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

Merci Seb,

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

;lmkl
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

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
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

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
Messages postés
36
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
21 mai 2009

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