OVH Cloud OVH Cloud

plusieurs appli

6 réponses
Avatar
jerome
Bonjour,

J'aimerais créer un petit utililtaire qui lancent plusieurs applications,
mais je ne veux pas qui les lancent en même temp mais à la suite.
c'est-à-dire que l'utilitaire doit attendre que l'appli soit bien lancée
avant de lancer la suivante.
Exemple :
Lancement du programme 1 en cours...
Lancement du programme 1 effectué
Lancement du programme 2 en cours...
etc

et non pas :
Lancement du programme 1 en cours...
Lancement du programme 2 en cours...
Lancement du programme 2 effectué
Lancement du programme 1 effectué
etc

Pouvez-vous m'aider ?
Si j'utilise Shell, celui attend-il ?
exemple :
val=shell("prog1",0)
val2=shell("prog2",0)
etc

Merci
Jerome

6 réponses

Avatar
François Picalausa
Bonjour/soir,

Shell n'attends pas. Par contre, la solution proposée dans l'article suivant
fait ce que tu veux:
http://support.microsoft.com/default.aspx?scid9796

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bac4b$0$10260$
Bonjour,

J'aimerais créer un petit utililtaire qui lancent plusieurs
applications, mais je ne veux pas qui les lancent en même temp mais à
la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
soit bien lancée avant de lancer la suivante.
Exemple :
Lancement du programme 1 en cours...
Lancement du programme 1 effectué
Lancement du programme 2 en cours...
etc

et non pas :
Lancement du programme 1 en cours...
Lancement du programme 2 en cours...
Lancement du programme 2 effectué
Lancement du programme 1 effectué
etc

Pouvez-vous m'aider ?
Si j'utilise Shell, celui attend-il ?
exemple :
val=shell("prog1",0)
val2=shell("prog2",0)
etc

Merci
Jerome


Avatar
jerome
merci, je vais voir de suite.

jerome

"François Picalausa" a écrit dans le message de news:
#
Bonjour/soir,

Shell n'attends pas. Par contre, la solution proposée dans l'article


suivant
fait ce que tu veux:
http://support.microsoft.com/default.aspx?scid9796

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bac4b$0$10260$
> Bonjour,
>
> J'aimerais créer un petit utililtaire qui lancent plusieurs
> applications, mais je ne veux pas qui les lancent en même temp mais à
> la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
> soit bien lancée avant de lancer la suivante.
> Exemple :
> Lancement du programme 1 en cours...
> Lancement du programme 1 effectué
> Lancement du programme 2 en cours...
> etc
>
> et non pas :
> Lancement du programme 1 en cours...
> Lancement du programme 2 en cours...
> Lancement du programme 2 effectué
> Lancement du programme 1 effectué
> etc
>
> Pouvez-vous m'aider ?
> Si j'utilise Shell, celui attend-il ?
> exemple :
> val=shell("prog1",0)
> val2=shell("prog2",0)
> etc
>
> Merci
> Jerome




Avatar
jerome
En fait, ce n'est pas ce que j'attends.
Ce code attends qu'on est quitter l'application pour lancer la suivante, ce
que je ne veux pas (de plus il utilise INFINITE qui a pour effet de buggé
légèrement le PC et en plus il utilise le processeur presque à 100% juste
pour attendre la fin d'un programme.).

Je vais tenté d'être plus explicite :
Je veux qu'une application se lance, puis une autre, puis une autre ...
(même si celles-ci ne sont pas fermées par la suite) mais de manière
ordonnée et surtout pas simultanément.
Car certaines applications peuvent mettre du temps pour démarrer, et je ne
veux pas qu'une autre se lance avant que celle-ci soit bien démarrer.

Enfin, j'espère mettre mieux fait comprendre, même si j'en ai pas
l'impression.

Merci

"François Picalausa" a écrit dans le message de news:
#
Bonjour/soir,

Shell n'attends pas. Par contre, la solution proposée dans l'article


suivant
fait ce que tu veux:
http://support.microsoft.com/default.aspx?scid9796

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bac4b$0$10260$
> Bonjour,
>
> J'aimerais créer un petit utililtaire qui lancent plusieurs
> applications, mais je ne veux pas qui les lancent en même temp mais à
> la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
> soit bien lancée avant de lancer la suivante.
> Exemple :
> Lancement du programme 1 en cours...
> Lancement du programme 1 effectué
> Lancement du programme 2 en cours...
> etc
>
> et non pas :
> Lancement du programme 1 en cours...
> Lancement du programme 2 en cours...
> Lancement du programme 2 effectué
> Lancement du programme 1 effectué
> etc
>
> Pouvez-vous m'aider ?
> Si j'utilise Shell, celui attend-il ?
> exemple :
> val=shell("prog1",0)
> val2=shell("prog2",0)
> etc
>
> Merci
> Jerome




Avatar
François Picalausa
Bonjour/Soir,

(de plus il utilise INFINITE qui a
pour effet de buggé légèrement le PC



Il empêche uniquemment le rafraichissement de la form, puisqu'il empêche
l'exécution de code.

et en plus il utilise le
processeur presque à 100% juste pour attendre la fin d'un programme.).



Pas ici...
Environ 02% pour notepad contre 00% pour VB
80% pour les inutilisés.

Ce que tu veux, il me semble, c'est lancer les processus en chaine mais de
manière asynchrone...
une sorte de shell pour plusieurs programmes.

Une solution serait de créer un activeX exe qui lui pourra exécuter les
processus de manière asynchrone.

Voici un exemple non testé:
'Dans un module, module1:
Option Explicit

Private Declare Function SetTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) _
As Long
Private Declare Function KillTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long _
) _
As Long

Private m_strProgs As String
Private m_TmrID
Public m_ClassBack As Class1

Public Function ExecProgs(StrProgs As String, ClassBack As Class1)
m_strProgs = StrProgs

Set m_ClassBack = ClassBack

m_TmrID = SetTimer(0, 0, 1, AddressOf TimerProc)
End Function

Private Function TimerProc( _
ByVal hwnd As Long, _
ByVal umsg As Long, _
ByVal idEvent As Long, _
ByVal dwTime As Long _
) As Long

KillTimer 0, m_TmrID

Dim strTblCmds() As String
strTblCmds = Split(m_strProgs, ",")

For i = 0 To UBound(strTblCmds)
ExecCmd strTblCmds(i)
Next i

m_ClassBack.CallSequenceEnd (m_strProgs)
End Function

'Dans un module, module2 ou dans module 1, recopier le code de
'http://support.microsoft.com/default.aspx?scid9796

'Dans une classe, class1
Option Explicit

Event SequenceEnd(Sequence As String)

Friend Sub CallSequenceEnd(Sequence As String)
RaiseEvent SequenceEnd(Sequence)
End Sub

Sub PlaySequence(Sequence As String)
Module1.ExecProgs (Sequence)
End Sub


En référençant dans un autre projet ton activeX Exe, une fois celui ci
compilé, tu pourra exécuter tes commandes de cette manière:

Private WithEvents MonObjet As ProjetActiveXExe.Class1

Private Sub Form_Load()
Set MonObjet = New ProjetActiveXExe.Class1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set MonObjet = Nothing
End Sub

Sub Toto()
MonObjet.PlaySequence("notepad.exe,calc.exe")
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bb9d3$0$17878$
En fait, ce n'est pas ce que j'attends.
Ce code attends qu'on est quitter l'application pour lancer la
suivante, ce que je ne veux pas (de plus il utilise INFINITE qui a
pour effet de buggé légèrement le PC et en plus il utilise le
processeur presque à 100% juste pour attendre la fin d'un programme.).

Je vais tenté d'être plus explicite :
Je veux qu'une application se lance, puis une autre, puis une autre
... (même si celles-ci ne sont pas fermées par la suite) mais de
manière ordonnée et surtout pas simultanément.
Car certaines applications peuvent mettre du temps pour démarrer, et
je ne veux pas qu'une autre se lance avant que celle-ci soit bien
démarrer.

Enfin, j'espère mettre mieux fait comprendre, même si j'en ai pas
l'impression.

Merci

"François Picalausa" a écrit dans le message de
news: #
Bonjour/soir,

Shell n'attends pas. Par contre, la solution proposée dans l'article
suivant fait ce que tu veux:
http://support.microsoft.com/default.aspx?scid9796

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bac4b$0$10260$
Bonjour,

J'aimerais créer un petit utililtaire qui lancent plusieurs
applications, mais je ne veux pas qui les lancent en même temp mais
à la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
soit bien lancée avant de lancer la suivante.
Exemple :
Lancement du programme 1 en cours...
Lancement du programme 1 effectué
Lancement du programme 2 en cours...
etc

et non pas :
Lancement du programme 1 en cours...
Lancement du programme 2 en cours...
Lancement du programme 2 effectué
Lancement du programme 1 effectué
etc

Pouvez-vous m'aider ?
Si j'utilise Shell, celui attend-il ?
exemple :
val=shell("prog1",0)
val2=shell("prog2",0)
etc

Merci
Jerome






Avatar
jerome
Ok, merci pour ce code.
Par contre, j'obtiens une erreur à la compilation :
"Cet argument n'est pas facultatif" sur Execprogs

merci
Jerome

"François Picalausa" a écrit dans le message de news:
#
Bonjour/Soir,

> (de plus il utilise INFINITE qui a
> pour effet de buggé légèrement le PC

Il empêche uniquemment le rafraichissement de la form, puisqu'il empêche
l'exécution de code.

> et en plus il utilise le
> processeur presque à 100% juste pour attendre la fin d'un programme.).

Pas ici...
Environ 02% pour notepad contre 00% pour VB
80% pour les inutilisés.

Ce que tu veux, il me semble, c'est lancer les processus en chaine mais de
manière asynchrone...
une sorte de shell pour plusieurs programmes.

Une solution serait de créer un activeX exe qui lui pourra exécuter les
processus de manière asynchrone.

Voici un exemple non testé:
'Dans un module, module1:
Option Explicit

Private Declare Function SetTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) _
As Long
Private Declare Function KillTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long _
) _
As Long

Private m_strProgs As String
Private m_TmrID
Public m_ClassBack As Class1

Public Function ExecProgs(StrProgs As String, ClassBack As Class1)
m_strProgs = StrProgs

Set m_ClassBack = ClassBack

m_TmrID = SetTimer(0, 0, 1, AddressOf TimerProc)
End Function

Private Function TimerProc( _
ByVal hwnd As Long, _
ByVal umsg As Long, _
ByVal idEvent As Long, _
ByVal dwTime As Long _
) As Long

KillTimer 0, m_TmrID

Dim strTblCmds() As String
strTblCmds = Split(m_strProgs, ",")

For i = 0 To UBound(strTblCmds)
ExecCmd strTblCmds(i)
Next i

m_ClassBack.CallSequenceEnd (m_strProgs)
End Function

'Dans un module, module2 ou dans module 1, recopier le code de
'http://support.microsoft.com/default.aspx?scid9796

'Dans une classe, class1
Option Explicit

Event SequenceEnd(Sequence As String)

Friend Sub CallSequenceEnd(Sequence As String)
RaiseEvent SequenceEnd(Sequence)
End Sub

Sub PlaySequence(Sequence As String)
Module1.ExecProgs (Sequence)
End Sub


En référençant dans un autre projet ton activeX Exe, une fois celui ci
compilé, tu pourra exécuter tes commandes de cette manière:

Private WithEvents MonObjet As ProjetActiveXExe.Class1

Private Sub Form_Load()
Set MonObjet = New ProjetActiveXExe.Class1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set MonObjet = Nothing
End Sub

Sub Toto()
MonObjet.PlaySequence("notepad.exe,calc.exe")
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bb9d3$0$17878$
> En fait, ce n'est pas ce que j'attends.
> Ce code attends qu'on est quitter l'application pour lancer la
> suivante, ce que je ne veux pas (de plus il utilise INFINITE qui a
> pour effet de buggé légèrement le PC et en plus il utilise le
> processeur presque à 100% juste pour attendre la fin d'un programme.).
>
> Je vais tenté d'être plus explicite :
> Je veux qu'une application se lance, puis une autre, puis une autre
> ... (même si celles-ci ne sont pas fermées par la suite) mais de
> manière ordonnée et surtout pas simultanément.
> Car certaines applications peuvent mettre du temps pour démarrer, et
> je ne veux pas qu'une autre se lance avant que celle-ci soit bien
> démarrer.
>
> Enfin, j'espère mettre mieux fait comprendre, même si j'en ai pas
> l'impression.
>
> Merci
>
> "François Picalausa" a écrit dans le message de
> news: #
>> Bonjour/soir,
>>
>> Shell n'attends pas. Par contre, la solution proposée dans l'article
>> suivant fait ce que tu veux:
>> http://support.microsoft.com/default.aspx?scid9796
>>
>> --
>> François Picalausa (MVP VB)
>> FAQ VB : http://faq.vb.free.fr
>> MSDN : http://msdn.microsoft.com
>>
>>
>> "jerome" a écrit dans le message de
>> news:3f9bac4b$0$10260$
>>> Bonjour,
>>>
>>> J'aimerais créer un petit utililtaire qui lancent plusieurs
>>> applications, mais je ne veux pas qui les lancent en même temp mais
>>> à la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
>>> soit bien lancée avant de lancer la suivante.
>>> Exemple :
>>> Lancement du programme 1 en cours...
>>> Lancement du programme 1 effectué
>>> Lancement du programme 2 en cours...
>>> etc
>>>
>>> et non pas :
>>> Lancement du programme 1 en cours...
>>> Lancement du programme 2 en cours...
>>> Lancement du programme 2 effectué
>>> Lancement du programme 1 effectué
>>> etc
>>>
>>> Pouvez-vous m'aider ?
>>> Si j'utilise Shell, celui attend-il ?
>>> exemple :
>>> val=shell("prog1",0)
>>> val2=shell("prog2",0)
>>> etc
>>>
>>> Merci
>>> Jerome




Avatar
jerome
C'est bon, j'ai trouvé.
Mais il faut tout de même attendre qu'une appli se termine pour que l'autre
se lance.
Je vais cherché une solution possible avec le code que tu m'as fournis.

Merci encore
jerome

"François Picalausa" a écrit dans le message de news:
#
Bonjour/Soir,

> (de plus il utilise INFINITE qui a
> pour effet de buggé légèrement le PC

Il empêche uniquemment le rafraichissement de la form, puisqu'il empêche
l'exécution de code.

> et en plus il utilise le
> processeur presque à 100% juste pour attendre la fin d'un programme.).

Pas ici...
Environ 02% pour notepad contre 00% pour VB
80% pour les inutilisés.

Ce que tu veux, il me semble, c'est lancer les processus en chaine mais de
manière asynchrone...
une sorte de shell pour plusieurs programmes.

Une solution serait de créer un activeX exe qui lui pourra exécuter les
processus de manière asynchrone.

Voici un exemple non testé:
'Dans un module, module1:
Option Explicit

Private Declare Function SetTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) _
As Long
Private Declare Function KillTimer _
Lib "user32" _
( _
ByVal hwnd As Long, _
ByVal nIDEvent As Long _
) _
As Long

Private m_strProgs As String
Private m_TmrID
Public m_ClassBack As Class1

Public Function ExecProgs(StrProgs As String, ClassBack As Class1)
m_strProgs = StrProgs

Set m_ClassBack = ClassBack

m_TmrID = SetTimer(0, 0, 1, AddressOf TimerProc)
End Function

Private Function TimerProc( _
ByVal hwnd As Long, _
ByVal umsg As Long, _
ByVal idEvent As Long, _
ByVal dwTime As Long _
) As Long

KillTimer 0, m_TmrID

Dim strTblCmds() As String
strTblCmds = Split(m_strProgs, ",")

For i = 0 To UBound(strTblCmds)
ExecCmd strTblCmds(i)
Next i

m_ClassBack.CallSequenceEnd (m_strProgs)
End Function

'Dans un module, module2 ou dans module 1, recopier le code de
'http://support.microsoft.com/default.aspx?scid9796

'Dans une classe, class1
Option Explicit

Event SequenceEnd(Sequence As String)

Friend Sub CallSequenceEnd(Sequence As String)
RaiseEvent SequenceEnd(Sequence)
End Sub

Sub PlaySequence(Sequence As String)
Module1.ExecProgs (Sequence)
End Sub


En référençant dans un autre projet ton activeX Exe, une fois celui ci
compilé, tu pourra exécuter tes commandes de cette manière:

Private WithEvents MonObjet As ProjetActiveXExe.Class1

Private Sub Form_Load()
Set MonObjet = New ProjetActiveXExe.Class1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set MonObjet = Nothing
End Sub

Sub Toto()
MonObjet.PlaySequence("notepad.exe,calc.exe")
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"jerome" a écrit dans le message de
news:3f9bb9d3$0$17878$
> En fait, ce n'est pas ce que j'attends.
> Ce code attends qu'on est quitter l'application pour lancer la
> suivante, ce que je ne veux pas (de plus il utilise INFINITE qui a
> pour effet de buggé légèrement le PC et en plus il utilise le
> processeur presque à 100% juste pour attendre la fin d'un programme.).
>
> Je vais tenté d'être plus explicite :
> Je veux qu'une application se lance, puis une autre, puis une autre
> ... (même si celles-ci ne sont pas fermées par la suite) mais de
> manière ordonnée et surtout pas simultanément.
> Car certaines applications peuvent mettre du temps pour démarrer, et
> je ne veux pas qu'une autre se lance avant que celle-ci soit bien
> démarrer.
>
> Enfin, j'espère mettre mieux fait comprendre, même si j'en ai pas
> l'impression.
>
> Merci
>
> "François Picalausa" a écrit dans le message de
> news: #
>> Bonjour/soir,
>>
>> Shell n'attends pas. Par contre, la solution proposée dans l'article
>> suivant fait ce que tu veux:
>> http://support.microsoft.com/default.aspx?scid9796
>>
>> --
>> François Picalausa (MVP VB)
>> FAQ VB : http://faq.vb.free.fr
>> MSDN : http://msdn.microsoft.com
>>
>>
>> "jerome" a écrit dans le message de
>> news:3f9bac4b$0$10260$
>>> Bonjour,
>>>
>>> J'aimerais créer un petit utililtaire qui lancent plusieurs
>>> applications, mais je ne veux pas qui les lancent en même temp mais
>>> à la suite. c'est-à-dire que l'utilitaire doit attendre que l'appli
>>> soit bien lancée avant de lancer la suivante.
>>> Exemple :
>>> Lancement du programme 1 en cours...
>>> Lancement du programme 1 effectué
>>> Lancement du programme 2 en cours...
>>> etc
>>>
>>> et non pas :
>>> Lancement du programme 1 en cours...
>>> Lancement du programme 2 en cours...
>>> Lancement du programme 2 effectué
>>> Lancement du programme 1 effectué
>>> etc
>>>
>>> Pouvez-vous m'aider ?
>>> Si j'utilise Shell, celui attend-il ?
>>> exemple :
>>> val=shell("prog1",0)
>>> val2=shell("prog2",0)
>>> etc
>>>
>>> Merci
>>> Jerome