OVH Cloud OVH Cloud

Application déja ouverte

8 réponses
Avatar
STEPH
Bonjour,

Sur vb6 je souhaite contrôler si une application mappoint est déja ouverte.
Comment faire?
Merci paravance de votre aide.
manu

8 réponses

Avatar
Loïc
http://www.vbfrance.com/code.aspx?ID500

--
Loïc
Avatar
YannX
Ci dessous un bout de code que j'ai recupéré et intégré,
avec ses références......

Lire la FAQ un petit coup, c'est agréable.......


----- Original Message -----
From: "STEPH" <(PAS DE PUB)
Newsgroups: microsoft.public.fr.vb
Sent: Tuesday, October 19, 2004 2:27 PM
Subject: Application déja ouverte


Bonjour,

Sur vb6 je souhaite contrôler si une application mappoint est déja


ouverte.
Comment faire?
Merci paravance de votre aide.
manu







' Comment n 'autoriser qu'une seule instance de mon application ? [haut]
' auteur: Romain Puyfoulhoux (
http://vb.developpez.com/faq/?page=Divers#singleton )
'
'Certaines applications n'acceptent d'être ouverte qu'une seule fois.
' Si l'on essaie de l'ouvrir une deuxième fois,
' la fenêtre de la première instance repasse en premier plan '
' et est restaurée si nécessaire.
'
'Pour tester le code ci-dessous, créez un projet et ajoutez une form.
' Son nom est Form1 par défaut.
' Ajoutez ensuite le code ci-dessous dans un module standard.
' Enfin, sélectionnez "Sub Main" comme objet de démarrage dans les
propriétés du projet.
'
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal
lpClassName As String, _
ByVal
lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal
wCmd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal
nCmdShow As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As
Long) As Long

Private Const SW_RESTORE = 9
Private Const GW_HWNDPREV = 3

Sub Main()

Dim lngHandle As Long

'Cherche une fenêtre qui serait déjà ouverte
lngHandle = GetPreviousWindow
If lngHandle > 0 Then
'fenêtre trouvée, on l'affiche
DisplayWindow lngHandle
Else
FormBeta_Graf.Show
End If

End Sub

Private Function GetPreviousWindow() As Long

Dim strTitre As String
Dim lngHwnd As Long

'Sauvegarde le titre de l'application et le modifie, sinon,
'on trouverait toujours une instance de l'application : celle qui vient
d'être lancée
strTitre = App.Title
App.Title = "Temp_Modif" & App.Title
'Récupère le handle de la fenêtre principale (invisible)
lngHwnd = FindWindow("ThunderRT6Main", strTitre)
'Obtient le handle de la fenêtre visible
If lngHwnd > 0 Then GetPreviousWindow = GetWindow(lngHwnd, GW_HWNDPREV)
'Restaure le titre original
App.Title = strTitre

End Function

Private Sub DisplayWindow(ByVal lngHandle As Long)

ShowWindow lngHandle, SW_RESTORE
SetForegroundWindow lngHandle

End Sub
' La Fonction GetPreviousWindow() renvoie le handle de la fenêtre de
l'application
' si celle-ci a déjà été ouverte. La fonction DisplayWindow() restaure
' et met au premier plan la fenêtre dont le handle est passé en paramètre. '
' Dans la procédure Main, nous recherchons une instance existante.
' Si nous en avons trouvé une, nous l'activons, sinon nous affichons Form1.
Avatar
Clive Lumb
"STEPH" <(PAS DE PUB) a écrit dans le message de
news:
Bonjour,

Sur vb6 je souhaite contrôler si une application mappoint est déja


ouverte.
Comment faire?
Merci paravance de votre aide.
manu




Il y en a quelques uns sur ebay.co.uk entre £10 et £60
http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&category51&itemq08315616&rd=1
http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&category51&itemq08663580&rd=1
Certains proposent l'envoi partout dans le monde
D'autres se limitent à l'UK mais en général si tu leur ecris gentiment ils
acceptent d'envoyer en France.

Si tu as besoin d'un coup de main pour leur écrire en anglais, n'hésistes
pas de me contacter.

Clive
Avatar
STEPH
Merci de ta réponse mais elle ne convient pas à mon besoin
particulier;;;;;peut être que je devrait être plus clair:

Avant d'ouvrir ma carte mappoint "mapi.ptm", souhaite vérifier que
l'utilisateur ne l'est pas déja ouverte. Je ne veux pas l'ouvrir en lecture
seul.
Manu

"YannX" a écrit dans le message de
news:
Ci dessous un bout de code que j'ai recupéré et intégré,
avec ses références......

Lire la FAQ un petit coup, c'est agréable.......


----- Original Message -----
From: "STEPH" <(PAS DE PUB)
Newsgroups: microsoft.public.fr.vb
Sent: Tuesday, October 19, 2004 2:27 PM
Subject: Application déja ouverte


> Bonjour,
>
> Sur vb6 je souhaite contrôler si une application mappoint est déja
ouverte.
> Comment faire?
> Merci paravance de votre aide.
> manu
>
>



' Comment n 'autoriser qu'une seule instance de mon application ? [haut]
' auteur: Romain Puyfoulhoux (
http://vb.developpez.com/faq/?page=Divers#singleton )
'
'Certaines applications n'acceptent d'être ouverte qu'une seule fois.
' Si l'on essaie de l'ouvrir une deuxième fois,
' la fenêtre de la première instance repasse en premier plan '
' et est restaurée si nécessaire.
'
'Pour tester le code ci-dessous, créez un projet et ajoutez une form.
' Son nom est Form1 par défaut.
' Ajoutez ensuite le code ci-dessous dans un module standard.
' Enfin, sélectionnez "Sub Main" comme objet de démarrage dans les
propriétés du projet.
'
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal
lpClassName As String, _
ByVal
lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal
wCmd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,


ByVal
nCmdShow As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As
Long) As Long

Private Const SW_RESTORE = 9
Private Const GW_HWNDPREV = 3

Sub Main()

Dim lngHandle As Long

'Cherche une fenêtre qui serait déjà ouverte
lngHandle = GetPreviousWindow
If lngHandle > 0 Then
'fenêtre trouvée, on l'affiche
DisplayWindow lngHandle
Else
FormBeta_Graf.Show
End If

End Sub

Private Function GetPreviousWindow() As Long

Dim strTitre As String
Dim lngHwnd As Long

'Sauvegarde le titre de l'application et le modifie, sinon,
'on trouverait toujours une instance de l'application : celle qui vient
d'être lancée
strTitre = App.Title
App.Title = "Temp_Modif" & App.Title
'Récupère le handle de la fenêtre principale (invisible)
lngHwnd = FindWindow("ThunderRT6Main", strTitre)
'Obtient le handle de la fenêtre visible
If lngHwnd > 0 Then GetPreviousWindow = GetWindow(lngHwnd, GW_HWNDPREV)
'Restaure le titre original
App.Title = strTitre

End Function

Private Sub DisplayWindow(ByVal lngHandle As Long)

ShowWindow lngHandle, SW_RESTORE
SetForegroundWindow lngHandle

End Sub
' La Fonction GetPreviousWindow() renvoie le handle de la fenêtre de
l'application
' si celle-ci a déjà été ouverte. La fonction DisplayWindow() restaure
' et met au premier plan la fenêtre dont le handle est passé en paramètre.


'
' Dans la procédure Main, nous recherchons une instance existante.
' Si nous en avons trouvé une, nous l'activons, sinon nous affichons


Form1.






Avatar
YannX
Bonjour,

effectivement ce n'est pas du tout la meme chose !
Je te suggerre de re-ouvrir un Post avec en Sujet :
Eviter la re-ouverture d'un fichier de données texte en VB ! <<





Précise egalement si "l'utilisateur" veut dire le poste, le user sur un
réseau
ou l'executable, le quel pourrait re-charger plusieurs fois le fichier !

Je n'ai pas de solution toute faite, mais déjà une question :
comment ouvres-tu le fichier en Basic pour le lire ?
Est-ce que ton programme doit le ré-écrire ?

Accessoirement, sur www.sysinternals.com (adresse de tete),
il existe un .EXE qui retourne la liste des fichiers (actuellement) ouverts,
au pire =>
ton pgm lance la commande DOS " FileMon.exe | grep mapi.htm" >
test_mapi_open.chk
(ce qui va rechercher si il existe une ligne avec le nom de fichier que
tu veux)
Il te reste a relire ce ficheir texte avant de l'effacer : s'il y a
quelque chose, c'est...PERDU = OUVERT !

@+


"STEPH" <(PAS DE PUB) a écrit dans le message de
news:
Merci de ta réponse mais elle ne convient pas à mon besoin
particulier;;;;;peut être que je devrait être plus clair:

Avant d'ouvrir ma carte mappoint "mapi.ptm", souhaite vérifier que
l'utilisateur ne l'est pas déja ouverte. Je ne veux pas l'ouvrir en


lecture
seul.
Manu

"YannX" a écrit dans le message de
news:
> Ci dessous un bout de code que j'ai recupéré et intégré,
> avec ses références......
>
> Lire la FAQ un petit coup, c'est agréable.......
>
>
> ----- Original Message -----
> From: "STEPH" <(PAS DE PUB)
> Newsgroups: microsoft.public.fr.vb
> Sent: Tuesday, October 19, 2004 2:27 PM
> Subject: Application déja ouverte
>
>
> > Bonjour,
> >
> > Sur vb6 je souhaite contrôler si une application mappoint est déja
> ouverte.
> > Comment faire?
> > Merci paravance de votre aide.
> > manu
> >
> >
>
>
>
> ' Comment n 'autoriser qu'une seule instance de mon application ? [haut]
> ' auteur: Romain Puyfoulhoux (
> http://vb.developpez.com/faq/?page=Divers#singleton )
> '
> 'Certaines applications n'acceptent d'être ouverte qu'une seule fois.
> ' Si l'on essaie de l'ouvrir une deuxième fois,
> ' la fenêtre de la première instance repasse en premier plan '
> ' et est restaurée si nécessaire.
> '
> 'Pour tester le code ci-dessous, créez un projet et ajoutez une form.
> ' Son nom est Form1 par défaut.
> ' Ajoutez ensuite le code ci-dessous dans un module standard.
> ' Enfin, sélectionnez "Sub Main" comme objet de démarrage dans les
> propriétés du projet.
> '
> Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
>


(ByVal
> lpClassName As String, _
>


ByVal
> lpWindowName As String) As Long
> Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long,


ByVal
> wCmd As Long) As Long
> Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,
ByVal
> nCmdShow As Long) As Long
> Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As
> Long) As Long
>
> Private Const SW_RESTORE = 9
> Private Const GW_HWNDPREV = 3
>
> Sub Main()
>
> Dim lngHandle As Long
>
> 'Cherche une fenêtre qui serait déjà ouverte
> lngHandle = GetPreviousWindow
> If lngHandle > 0 Then
> 'fenêtre trouvée, on l'affiche
> DisplayWindow lngHandle
> Else
> FormBeta_Graf.Show
> End If
>
> End Sub
>
> Private Function GetPreviousWindow() As Long
>
> Dim strTitre As String
> Dim lngHwnd As Long
>
> 'Sauvegarde le titre de l'application et le modifie, sinon,
> 'on trouverait toujours une instance de l'application : celle qui vient
> d'être lancée
> strTitre = App.Title
> App.Title = "Temp_Modif" & App.Title
> 'Récupère le handle de la fenêtre principale (invisible)
> lngHwnd = FindWindow("ThunderRT6Main", strTitre)
> 'Obtient le handle de la fenêtre visible
> If lngHwnd > 0 Then GetPreviousWindow = GetWindow(lngHwnd, GW_HWNDPREV)
> 'Restaure le titre original
> App.Title = strTitre
>
> End Function
>
> Private Sub DisplayWindow(ByVal lngHandle As Long)
>
> ShowWindow lngHandle, SW_RESTORE
> SetForegroundWindow lngHandle
>
> End Sub
> ' La Fonction GetPreviousWindow() renvoie le handle de la fenêtre de
> l'application
> ' si celle-ci a déjà été ouverte. La fonction DisplayWindow() restaure
> ' et met au premier plan la fenêtre dont le handle est passé en


paramètre.
'
> ' Dans la procédure Main, nous recherchons une instance existante.
> ' Si nous en avons trouvé une, nous l'activons, sinon nous affichons
Form1.
>
>
>
>




Avatar
Gloops
Salut,

Tu es sûr que c'est une commande DOS, ça ?
Mon Windows XP ne connaît ni FileMon, ni grep.

Je ne me rappelle avoir vu grep que dans un bouquin Unix ...
____________________________________
YannX a écrit, le 21/10/2004 13:13 :

ton pgm lance la commande DOS " FileMon.exe | grep mapi.htm" >


Avatar
YannX
"Gloops" a écrit dans le message de
news:417b95e3$0$27010$
Salut,

Tu es sûr que c'est une commande DOS, ça ?
Mon Windows XP ne connaît ni FileMon, ni grep.

Je ne me rappelle avoir vu grep que dans un bouquin Unix ...
____________________________________
YannX a écrit, le 21/10/2004 13:13 :

> ton pgm lance la commande DOS " FileMon.exe | grep mapi.htm" >



Des clones DOS / Windows existent :
- chez Borland (prendre un "tres" vieux TP ou TC )
- chez GNU / GCC portage ou MK_Tools
Google....
Avatar
Gloops
Ah oui, vu comme ça, évidemment.
Une émulation, ça s'appelle ?
Il faut dire que c'est très pratique, pour s'entraîner quand on est
susceptible d'avoir à travailler sur Unix, et qu'on a Windows sur sa
machine.
ça permet de lancer une commande Unix sur un système DOS ou Windows :)
____________________________________
YannX a écrit, le 05/11/2004 11:53 :
ton pgm lance la commande DOS " FileMon.exe | grep mapi.htm" >





Des clones DOS / Windows existent :
- chez Borland (prendre un "tres" vieux TP ou TC )
- chez GNU / GCC portage ou MK_Tools
Google....