Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉTECTER UNE INSTANCE PRÉCÉDENTE DE MON APPLICATION


Information sur la source

Catégorie :Trucs & Astuces Classé sous : Précédente, Instance, PrevInstance, déjà Niveau : Débutant Date de création : 03/01/2008 Date de mise à jour : 01/03/2009 21:57:10 Vu / téléchargé: 3 884 / 316

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


Description

Beaucoup de questions sur le forum demandent comment gérer efficacement la détection d'une précédente instance d'un même programme.
Voici la solution que j'ai adoptée il y a quelques années et qui me rend bien service.

Dans les toutes premières lignes de code d'une application (dans un Form_Load ou dans une Sub Main), il suffit d'appeler la Sub ActivatePrevInstance fournie dans cette démo pour :
- repérer une forme qui porterait déjà le même nom
- la faire revenir en affichage normal si elle est en icône dans la barre des tâches
- lui donner le focus

Volontairement, cette détection ne teste que les fenêtres dont la classe est du compilé en VB6.
Pour faire la même chose en mode création, App.PrevInstance suffit.

La Sub ActivatePrevInstance peut recevoir en paramètre :
- soit (Me) pour désigner la forme que l'on cherche
- soit le caption de la forme à rechercher
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

27 avril 2008 04:04:17 :
gna gna gna
01 mars 2009 21:57:15 :
Correction orthographe

Commentaires et avis

signaler à un administrateur
Commentaire de retorik le 04/01/2008 09:22:25 10/10

Simple et exemple propre ;-)

signaler à un administrateur
Commentaire de doktorrelais le 07/01/2008 16:07:38

Bien vu pour tester si une appli connue est déjà active, mais pour
tester si l'application courante l'est déjà, il y a plus simple en VB6
compilé, par exemple dans Form_load d'une de mes démos...
Juste le test App.prevInstance suffit pour informer que l'appli
est déjà active et éviter de la charger plusieurs fois.
(PS les lignes qui suivent le test ne concernent que la mise
en place de l'appli au lancement..)

Private Sub Form_Load()
    If App.PrevInstance Then
        MsgBox "Cette démo est déjà active !", , "Démo TRANE"
        End
    End If
    Width = 12165
    Height = 7380
    Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
    Start = False
    Init
End Sub

signaler à un administrateur
Commentaire de jack le 07/01/2008 20:07:33 administrateur CS

Salut Doktorrelais
Oui, c'est l'utilisation standard de App.PrevInstance, mais cette technique ne permettra pas de détecter si une version compilée tourne déjà.
Pour ma part, je développais sur la même machine que celle sur laquelle tournait mon application (serveur de documentation). Je devais donc faire attention à ne pas avoir deux applis qui tournent en même temps (la vieille version compilée qui tourne 24h/24, et la version en développement), sinon cela me posait des problèmes (crash) de connexion à la DB + gestion du mode serveur IP.
Voilà pourquoi je m'étais préoccupé de retrouver l'appli sous forme compilée.

signaler à un administrateur
Commentaire de doktorrelais le 08/01/2008 13:39:39

Je suis ennuyé de devoir répondre à Jack qu'il s'agit bien d'un
listing d'une version compilée que mon exemple décrit et qui referme
immédiatement la "nouvelle" instance dès son chargement en mémoire
grâce à l'instruction "End" qui se trouve dans le test du App.Previnstance.

Quant à moi, lorsque je veux améliorer une appli déjà en service sur le
même poste ou sur un poste partagé sur réseau, je le renomme et je le place
dans un autre dossier ainsi que tous les liens utiles pour le développement,
quitte à faire une copie dynamique préliminaire d'une base de données si c'est nécessaire, tandis que l'appli active reste confinée dans son
environnement propre. Cette façon de faire m'oblige à cerner correctement
tous les liens entre mon appli et le reste de ce qui tourne sur le PC et
ne peut que rendre l'appli plus stable en final.

signaler à un administrateur
Commentaire de jack le 08/01/2008 15:49:17 administrateur CS

Oui, je suis d'accord sur l'organisation, sauf que, quand un serveur est en écoute sur un port TCP, c'est difficile de tester sans se connecter, mais tu as raison concernant la DB, ça oblige à changer le paramétrage, mais c'est préférable ... sauf si on acquiert des données en mode "test" et qu'on ne veut pas les perdre.
Chaquee application a sa spécificité.

Concernant le code, on s'est mal compris et il n'y a pas raison à polémique :
App.PrevInstance détectera une autre application compilée que si elle même est compilée. Ce test ne fonctionne pas entre une application en mode création et une autre - la même à quelques détails près - compilée.

Je pense qu'un mélange des deux peut être une bonne solution :
PrevInstance : de mode compilé qui surveille mode compilé.
La recherche de classe : de mode création ou mode compilé qui surveille mode compilé.

Vala

signaler à un administrateur
Commentaire de doktorrelais le 09/01/2008 00:24:28

Ton analyse est parfaite concernant la DB et je suis d'accord avec toi.
En fait, je constate qu'on suit le même raisonnement, car tu distingues
entre le test compilé-compilé et le test création-compilé.
Ce dernier cas, il est vrai que je ne l'utilise pratiquement jamais car
lorsqu'il s'agit de tester des modifications, je pratique par modules
indépendants avant de compiler et le test final a toujours lieu en mode
compilé. Donc, ton approche par recherche de classe est le seul qui
permet le test entre mode création et mode compilé... il se peut que j'ai
un jour besoin de cette fonction et je t'en remercie, bravo.

signaler à un administrateur
Commentaire de jack le 09/01/2008 01:00:43 administrateur CS

Mais de rien, Dok, on est là pour partager !

signaler à un administrateur
Commentaire de ghuysmans99 le 01/03/2009 16:26:30 10/10

"la détextion" : Ce ne serait pas plutôt "la détection" ?
Sinon pour le code 10/10.

signaler à un administrateur
Commentaire de jack le 01/03/2009 21:56:18 administrateur CS

Rohh : la honte
Merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Instance Excel [ par Zimoro ] Salut,Je travail avec Excel en utilisant COM.Je créer une instance Excel sous VB, mais c'ets lorsque que je quit, parfois l'instance Excel n'est pas f Erreur bizarre [ par Nanabel ] Voilà, quand j'exécute mon prog et quand j'ai un IE de lancer, ça marche nickel, mais si je lance le même prog et qu'aucune instance de IE n'est ouver Besoin d'aide! [ par Crazyblinkgirl ] Pourrai t-on me dire comment faire pour fermer une feuille et retourner à la précédente? Cela marche dans l'autre sens quand j'utilise nomfeuille.show Détection de l'instance [ par Patrice ] Je cherche à créer un bouton dans une autre application que la mienne avec la fonction api CreateWindowEx qui nécessite en paramètre une instance de l Instance: Tableau ou collection [ par Boula ] J'ai déclaré une instance d'une classe cPaiement dans uneclasse cPersonne. Ca fonctionne très bien mais j'ai besoind'un tableau de cette instance(cPai App.PrevInstance : C'est bien beau, mais... [ par processus ] Comment faire pour activer la fenêtre de la précédente instance au premier plan ?D'avance merci pour vos réponses Iexplore / page précédente [ par GhnombX ] Comme toujours, le problème est simple:je veux clicker sur la grosse flêche verte d'internet explorer (Page précédente) mais a l'aide d'un prog Vb.J'a Comment faire en sorte qu'il y ai qu'une seul instance de mon programme [ par DrPhil ] Bonjour,J'aimerai faire en sorte qu'il n'y ai qu'une seul instance de mon programme qui soi exécutée !Comment puis-je faire ? feuille précédente sous VB [ par coin ] Bonjour a tousAlors voila mon pb:A partir de plusieurs feuilles, je veux que si on clique sur un bouton de ces feuilles, on se retrouve sur une feuill tri sur cellules Excel avec VBA [ par thierrypp ] THIERRYPPBonjour,Comment procéder automatiquent à une élimination de cellule dans une colonne lorsque celle-ci à une valeur supérieure à 10% de la pr


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,749 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.