begin process at 2010 02 10 04:12:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :4 287 / 387

Auteur : jack

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip Source avec une capture SYSTRAY + BALLOON - VARIANTE AVEC TEXTE DANS L'ICÔNE
Source avec Zip Source avec une capture DATE-HEURE DE LANCEMENT D'UN PROGRAMME
Source avec Zip Source avec une capture SYSTRAY + BALLOON EN UN SEUL CONTRÔLE UTILISATEUR
Source avec Zip Source avec une capture Source .NET (Dotnet) SMS GENERATOR
Source avec Zip TRANSPORTER UNE DB ACCESS DANS UN DOCUMENT WORD

 Sources de la même categorie

AFFICHAGE SOUS EXCEL DE LA LISTE DES ' DES GROUPES par djebbipgm
AFFECTATION D'UNE ICÔNE À UN DOSSIER DANS L'EXPLORATEUR par djebbipgm
Source avec Zip CREATION DE GADGET EN VB6 par djebbipgm
Source avec Zip Source avec une capture CAPTEUR DE HANDLE, DE TITRE, DE CLASS, DE POSITION DE TAILLE... par Sechaud
Source avec Zip Source avec une capture COULEUR DANS UN RICHTEXTBOX SANS MODIFIER SELSTART OU SELLEN... par Renfield

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PUBLIC SHARED SANS MODULE - VARIABLE SINGLETON : IDENTIFICAT... par PCPT
Source .NET (Dotnet) LISTER LES NOMS DES INSTANCES SQL SERVER. par boutemine
Source avec Zip CRÉATION DE CONTRÔLES DYNAMIQUE par mimiZanzan
Source avec Zip Source .NET (Dotnet) OUVRIR DES DOCUMENTS DANS LA MÊME INSTANCE DE L'APPLICATION ... par ShareVB
Source avec Zip INSTANCE UNIQUE DE VOTRE APPLICATION par Renfield

Commentaires et avis

Commentaire de retorik le 04/01/2008 09:22:25 10/10

Simple et exemple propre ;-)

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

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.

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.

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

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.

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

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

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.

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales