Fin ouverture Windows

Signaler
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
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
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
idée : tu peux aussi vérifier le %age process...

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

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

Bonne prog ++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
ou du côté de SetTimer ...

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

Merci
Bonne prog ++
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
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 ++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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