begin process at 2008 07 18 20:07:31
1 212 564 membres
417 nouveaux aujourd'hui
14 164 membres club

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 : 27/04/2008 04:04:16 Vu / téléchargé: 2 617 / 223

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Beaucoup de questions sur le forum demandent comment gérer efficacement la détextion 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
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

27 avril 2008 04:04:17 :
gna gna gna
  • 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 !

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS