Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Bonjour LE TROLL,
LE TROLL a écrit :Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :
Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :
Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :Bonjour,
Je cherche comment interdire 2 lancements depuis la même applie, j'ai
bien ça:
Sub Form_Load()
If App.PrevInstance Then: End
End Sub
Mais ça ne marche pas car je lance depuis une feuille le bloc-notes,
ainsi:
Sub m_obs_Click()
Dim rep
rep = Shell("NotePad.exe " & App.Path & "Tarotobs.txt", 1)
End Sub
Je vois bien deux moyens lourds de faire ça:
- Lire les processus, et si je trouve le mien je refuse le lancement...
- Utiliser ShellExecut, car je crois qu'on a le retour...
Que voyez-vous comme solution (la plus courte), afin d'interdire de
lancer le bloc-notes plusieurs fois ???
Ne voyant pas pourquoi tu interdirai à l'utilisateur de lancer plusieurs
fois le bloc-notes, avec les documents de son choix, j'en déduis que tu ne
veux pas que ton programme le lance plusieurs fois avec le document
Tarotobs.txt. Si j'ai bon jusque là, il suffit de rechercher la fenêtre
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub ChercheFenetre()
Dim lResult As Long
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
If lResult = 0 Then
MsgBox "Pas ouvert"
Else
MsgBox "Déja ouvert"
End If
End Sub
NB : App.PrevInstance ne concerne que l'instance du programme VB lui même.
--
Cordialement,
Jacques.
Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
Bonjour LE TROLL,
LE TROLL a écrit :Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
En fait, l'API FindWindow recherche un titre de fenêtre correspondant au
deuxième paramètre. Pour les applications qui gèrent des documents, il est
d'usage (me semble t-il), d'utiliser le format :
NomDuDocument.[Ext]<Espace>-<Espace>NomDuProgramme
(L'extension n'est pas systématique, certaine applications gérant
plusieurs formats)
Donc, ici :
"Tarotobs.txt - Bloc-notes"
Si le nom de ton document est dans une variable :
NomDuDocument & " - Bloc-notes"
Dans le cas présent cela peut poser un problème avec une version non
francophone, où le Bloc-notes doit s'appeler différemment.
Cela serait bel et bien, si Microsoft respectait cette règle, et l'on
pourrait s'attendre à avoir, par exemple :
Classeur.xls - Microsoft Excel
Document.doc - Microsoft Word
et ben non, et me demande pas pourquoi :-) , on a
Microsoft Excel - Classeur.xls
Document.doc - Microsoft Word
Il y a également le cas d'Internet Explorer dont on peut personnaliser le
titre, grâce à la clé 'Windows Title' de la branche :
HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain
du registre.
Sans oublier les applications qui ne gèrent pas de documents, et dont le
titre se résume à leur nom.
<HS : Un peu de Promo>
Google Earth, par exemple, dont la version 4 n'est plus en bêta et
intègre la 3D et les textures, pour ceux qui n'aurait pas vu passer
l'information.
</HS : Un peu de Promo>
Tout cela pour dire qu'en fait, il n'y a pas vraiment de règles, et qu'il
faut faire des essais afin de voir comment est constitué le titre de la
fenêtre que l'on va rechercher.
NB : Le premier paramètre correspond au nom de la classe à laquelle la
fenêtre appartient. L'utilitaire Spy++ de Visual Studio permet de le
retrouver très simplement. Ici cela correspond au nom de l'exécutable,
mais ce n'est pas systématique :
Programme Classe
Notepad.exe Notepad
Excel.exe XLMAIN
Winword.exe OpusApp
'Office 2003)
et piège ultime :
Feuille VB6 dans l'IDE ThunderFormDC
Feuille VB6 dans un EXE ThunderRT6FormDC
Je ne peux pas vérifier, mais pour vb5, je pense que c'est :
ThunderRT5FormDC
Etonnant, non ;-)
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :
Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
En fait, l'API FindWindow recherche un titre de fenêtre correspondant au
deuxième paramètre. Pour les applications qui gèrent des documents, il est
d'usage (me semble t-il), d'utiliser le format :
NomDuDocument.[Ext]<Espace>-<Espace>NomDuProgramme
(L'extension n'est pas systématique, certaine applications gérant
plusieurs formats)
Donc, ici :
"Tarotobs.txt - Bloc-notes"
Si le nom de ton document est dans une variable :
NomDuDocument & " - Bloc-notes"
Dans le cas présent cela peut poser un problème avec une version non
francophone, où le Bloc-notes doit s'appeler différemment.
Cela serait bel et bien, si Microsoft respectait cette règle, et l'on
pourrait s'attendre à avoir, par exemple :
Classeur.xls - Microsoft Excel
Document.doc - Microsoft Word
et ben non, et me demande pas pourquoi :-) , on a
Microsoft Excel - Classeur.xls
Document.doc - Microsoft Word
Il y a également le cas d'Internet Explorer dont on peut personnaliser le
titre, grâce à la clé 'Windows Title' de la branche :
HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain
du registre.
Sans oublier les applications qui ne gèrent pas de documents, et dont le
titre se résume à leur nom.
<HS : Un peu de Promo>
Google Earth, par exemple, dont la version 4 n'est plus en bêta et
intègre la 3D et les textures, pour ceux qui n'aurait pas vu passer
l'information.
</HS : Un peu de Promo>
Tout cela pour dire qu'en fait, il n'y a pas vraiment de règles, et qu'il
faut faire des essais afin de voir comment est constitué le titre de la
fenêtre que l'on va rechercher.
NB : Le premier paramètre correspond au nom de la classe à laquelle la
fenêtre appartient. L'utilitaire Spy++ de Visual Studio permet de le
retrouver très simplement. Ici cela correspond au nom de l'exécutable,
mais ce n'est pas systématique :
Programme Classe
Notepad.exe Notepad
Excel.exe XLMAIN
Winword.exe OpusApp
'Office 2003)
et piège ultime :
Feuille VB6 dans l'IDE ThunderFormDC
Feuille VB6 dans un EXE ThunderRT6FormDC
Je ne peux pas vérifier, mais pour vb5, je pense que c'est :
ThunderRT5FormDC
Etonnant, non ;-)
--
Cordialement,
Jacques.
Bonjour LE TROLL,
LE TROLL a écrit :Jacques, ça marche très bien, merci encore, mais... question, dans:
lResult = FindWindow("Notepad", "Tarotobs.txt - Bloc-notes")
Comment sais-tu que le fichier "Tarotobs.txt" tu dois l'appeler
"Tarotobs.txt - Bloc-notes" ???
En fait, l'API FindWindow recherche un titre de fenêtre correspondant au
deuxième paramètre. Pour les applications qui gèrent des documents, il est
d'usage (me semble t-il), d'utiliser le format :
NomDuDocument.[Ext]<Espace>-<Espace>NomDuProgramme
(L'extension n'est pas systématique, certaine applications gérant
plusieurs formats)
Donc, ici :
"Tarotobs.txt - Bloc-notes"
Si le nom de ton document est dans une variable :
NomDuDocument & " - Bloc-notes"
Dans le cas présent cela peut poser un problème avec une version non
francophone, où le Bloc-notes doit s'appeler différemment.
Cela serait bel et bien, si Microsoft respectait cette règle, et l'on
pourrait s'attendre à avoir, par exemple :
Classeur.xls - Microsoft Excel
Document.doc - Microsoft Word
et ben non, et me demande pas pourquoi :-) , on a
Microsoft Excel - Classeur.xls
Document.doc - Microsoft Word
Il y a également le cas d'Internet Explorer dont on peut personnaliser le
titre, grâce à la clé 'Windows Title' de la branche :
HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain
du registre.
Sans oublier les applications qui ne gèrent pas de documents, et dont le
titre se résume à leur nom.
<HS : Un peu de Promo>
Google Earth, par exemple, dont la version 4 n'est plus en bêta et
intègre la 3D et les textures, pour ceux qui n'aurait pas vu passer
l'information.
</HS : Un peu de Promo>
Tout cela pour dire qu'en fait, il n'y a pas vraiment de règles, et qu'il
faut faire des essais afin de voir comment est constitué le titre de la
fenêtre que l'on va rechercher.
NB : Le premier paramètre correspond au nom de la classe à laquelle la
fenêtre appartient. L'utilitaire Spy++ de Visual Studio permet de le
retrouver très simplement. Ici cela correspond au nom de l'exécutable,
mais ce n'est pas systématique :
Programme Classe
Notepad.exe Notepad
Excel.exe XLMAIN
Winword.exe OpusApp
'Office 2003)
et piège ultime :
Feuille VB6 dans l'IDE ThunderFormDC
Feuille VB6 dans un EXE ThunderRT6FormDC
Je ne peux pas vérifier, mais pour vb5, je pense que c'est :
ThunderRT5FormDC
Etonnant, non ;-)
--
Cordialement,
Jacques.