Fin ouverture Windows

bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 - 23 août 2006 à 21:09
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 24 août 2006 à 15:24
Salut,

J'ai un petit programme qui demarre avec Windows (inscrit dans le registre). Le problème est qu'il se lance trop tôt. J'ai besoin qu'il se lance après l'un des services.

J'ai bien penser à faire une boucle pour attendre le demarrage de ce service. Mais si pour X raisons le service ne demarre pas... Vous devinez la suite.

Donc j'aimerai savoir s'il est possible de savoir a quel moment Windows a fini de charger tout les services et autres composants lors de son demarrage.

Mais je suis ouvert à toute autre suggestion.

Merci d'avance
Bonne prog
++

13 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
23 août 2006 à 22:38
 Bonsoir,

Et dans le cas où ce service ne démarre pas. Que fait-on ???

Une simple boucle (avec un timer), en WMI, pourrait permettre
de lancer ton programme, après vérif que ton process soit actif.

Exemple, ci-dessous (sans boucle timer), détaillant les process actifs:
:
Option Explicit
Dim strComputer,objWMIService,colProcesses,objProcess,ProcessTime,strCreationDate,user,Domain,strOwner,h,m,s,chaine
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process")        ' where Name='IEXPLORE.EXE'
Chaine="Process     |Creation Date Time |Handles|Threads|Owner              |Priority|MemoryUsage|MaxMemUsage|MemRequired|MaxMemRequi|       Swap|   Max Swap|CPU time|PID |PFaults|Path" & vbCrLf
For Each objProcess in colProcesses
        If objProcess.GetOwner ( User, Domain ) = 0 Then
                strOwner= Domain & "" & User
        Else
                strOwner="Unknown"
        End If
        ProcessTime=(CSng(objProcess.KernelModeTime) + CSng(objProcess.UserModeTime)) / 10000000
        h=right("0" & fix(ProcessTime/60/60),2)
        ProcessTime=ProcessTime-h*60*60
        m=right("0" & fix(ProcessTime/60),2)
        s=Right("0" & round(ProcessTime-m*60),2)
        strCreationDate=Mid(objProcess.CreationDate,7,2) & "/" & Mid(objProcess.CreationDate,5,2) & "/" & Left(objProcess.CreationDate,4) & " " & Mid(objProcess.CreationDate,9,2) & ":" & Mid(objProcess.CreationDate,11,2) & ":" & Mid(objProcess.CreationDate,13,2)
        If strCreationDate="// ::" Then strCreationDate=Space(19)
        Chaine=Chaine &  Left(objProcess.Name & space(8),12) & "|" _
                & strCreationDate & "|" & Right(Space(6) & objProcess.HandleCount,7) & "|" _
                & Right(Space(6) & objProcess.ThreadCount,7) & "|" _
                & Left(strOwner & space(14),19) & "|" _
                & Left(objProcess.Priority & Space(7),8) & "|" _
                & Right(Space(10) & objProcess.PageFileUsage ,11) & "|" _
                & Right(Space(10) & objProcess.PeakPageFileUsage ,11) & "|" _
                & Right(Space(8) & objProcess.WorkingSetSize ,11) & "|" _
                & Right(Space(8) & objProcess.PeakWorkingSetSize ,11) & "|" _
                & Right(Space(10) & objProcess.VirtualSize ,11) & "|" _
                & Right(Space(10) & objProcess.PeakVirtualSize ,11) & "|" _
                & h & ":" & m & ":" & s & "|" _
                & Left(objProcess.ProcessID & space(3),4) & "|"  _
                & Right(Space(6) & objProcess.PageFaults ,7) & "|" & objProcess.ExecutablePath
        Chaine=Chaine & vbCrLf
If objProcess.Name = "vbsedit.exe" Then MsgBox objProcess.Name & " " & objProcess.VirtualSize
Next
Set objWMIService = Nothing
Set colProcesses = Nothing
wscript.echo chaine

jean-marc
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 août 2006 à 22:41
salut,
savoir quand windows a fini est impossible. admettons que je mette une appli perso qui se charge de faire une sauvegarde d'une minute? l'appli est chargée tout comme windows mais mon process tourne au max.

une solution (peut-être pas des plus propres) est de mettre un Sleep (180000) par exemple. ton appli sera chargée (trop tôt) mais ne démarrera qu'après 3 mintes.

à voir....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2006 à 23:28
Salut
Du tout cuit ici --> http://www.vbfrance.com/codes/SESSION-WINDOWS-ETE-DEMARREE_29354.aspx
Tu n'as plus qu'à faire attendre ton appli (de préférence dans un module au travers d'une Sub Main avant de charger ta première forme forme)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
23 août 2006 à 23:56
Salut,
Tout d'abord, merci pour vos réponses.

JMO>>"Et dans le cas où ce service ne démarre pas. Que fait-on ???"
=>Dans ce cas on ne fait rien. Et le programme se ferme.
Le vrai problème est que je ne tiens pas à avoir une boucle qui continue sans cesse si le service en question ne demarre jamais. Cela ralentirai le PC inutilement.

PCPT>>J'ai effectivement pensé au Sleep. Mais mon objectif est de masquer une icone du SysTray. Et il est difficile de concilier :
- le fait que je ne veux pas que cette icone apparaissent trop longtemp
- le fait que si je met un sleep trop court, un PC lent n'aura pas fini de charger

JACK>>Je connaissais déjà ta source. Mais le problème est un peu le même que pour la solution proposée par PCPT

J'ai bien pensé à un Timer qui vérifierai pendant un certain temps mais je n'utilise pas de form.

Je pense que je vais utiliser l'AI GetTickCount pour me bidouiller un petit Timer. Et au bout de 3 ou 4 min si l'appli ne trouve rien, elle abandonne.

Bonne prog
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 août 2006 à 00:01
gettickcount te renverra une valeur à vérifier en boucle avec un doevents, donc beaucoup de ressources.
par contre tu peux créer un timer. il faudra sans doute passer par une classe (pas d'event dans un module)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 août 2006 à 00:02
idée : tu peux aussi vérifier le %age process...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
24 août 2006 à 00:23
OK, je pense que je vais me lancer dans un timer à l'aide d'une classe. Mais comment faire sans utiliser GetTickCount ?

Bonne prog ++
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
24 août 2006 à 00:44
Suis-je bête, avec Sleep !

Bonne prog ++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 août 2006 à 02:18
ou du côté de SetTimer ...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
24 août 2006 à 08:00
Oui, utilise les timers de l'API Windows directement ! Y'a pas que le contrôle timer de vb dans la vie ;)
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
24 août 2006 à 14:26
Ok je vais regardé par là, car Sleep "PAS BON", cela bloque tout le fonctionnement de l'appli.

Merci
Bonne prog ++
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
24 août 2006 à 15:10
Bon, je viens de voir du côté de SetTimer mais il me demande un handle alors que je n'en ai pas à lui fournir. Je n'utilise que des modules et class.


Auriez-vous une idée ?

Bonne prog ++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 août 2006 à 15:24
le handle du bureau, de la barre des tâches, etc....

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Rejoignez-nous