Gérer une instance de l'application déjà lancée ???

spiazzini Messages postés 1 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 15 octobre 2002 - 15 oct. 2002 à 16:42
jyle3d Messages postés 8 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 13 décembre 2006 - 3 oct. 2003 à 14:04
VB fourni la propriété app.previnstance pour connaitre l'existence d'une instance précédente de l'application

Comment faire pour faire venir au premier plan, l'instance déjà en exécution, ou lui signifier qu'elle doit reprendre la main et éventuellement afficher une fenêtre ?

J'ai bidouillé une astuce qui consiste (dans le cas d'une App.previnstance = True) à créer un mouchard dans le répertoire de l'application. L'instance déjà en exécution cherche toute les secondes la présence de ce mouchard. En cas de mouchard présent, l'application réapparait. Mais c'est loin d'être une solution propre.

De plus, comment être sûr que la fenêtre qui va réapparaitre sera systématiquement au premier plan avec le focus ?

J'utilise l'API SetWindowPos hwnd, lHWNDTOPMOST_, 0, 0, 0, 0, lSWPNOSIZE_ Or lSWPNOMOVE_

mais il me semble que dans certains cas, la fenêtre apparait bien au premier plan, mais c'est une autre fenêtre (IE, l'Explorer, peut importe) qui a le focus malgré tout.

Merci de votre aide...

1 réponse

jyle3d Messages postés 8 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 13 décembre 2006
3 oct. 2003 à 14:04
voilà une solution plus élégante :

Tu récupère le Handle de ta fenetre (son HWND) avec la fonction " FindWindow(LPSTR className, LPSTR TitreFenetre); "

'className' représente le nom de la classe de fenetre utilisée. Tu peux la retrouver avec : "GetClassName(HWND hWndEnCours, LPSTR nomClasse, int nbMaxCaractere); "

'TitreFenetre' représente le titre de la fenetre que tu recherches.

Ensuite tu forces cette fenetre au premier plan avec la fonction " SetForegroundWindow(HWND hWnd); "
disponible dans user32.dll

J'ai pas le temps de te faire tout le code mais cela peut peut être t'aider. En consultant la MSDN sur ces 3 fonctions ton problème est résolu ;o)

=================================================

| Equipe jyle3D : Modeler 3D
| - Jérome Fuselier
| - Yann Lazareth
|
| www.jyle3d.fr.fm
|
[red]=============
0
Rejoignez-nous