[..] Savoir si le bureau est affiché

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Burnotyo
Niveau 1
Niveau 1
Messages : 13
Enregistré le : jeu. 10 déc. 2009 19:55
Status : Hors ligne

[..] Savoir si le bureau est affiché

#1

Message par Burnotyo »

Bonjour,

Je cherche une solution pour savoir si, lors d'une ouverture de session, le bureau Windows s'est affiché ou pas encore.

Pour préciser : je travaille sur un outil qui affiche des infos sur utilisateur à l'ouverture de session (simple msgbox), avec un délai automatique de fermeture de fenêtre de quelques secondes. Problème : Selon les postes ou les différentes versions de Windows, les temps d'ouverture de session ne sont pas les mêmes, à tel point que si la fenêtre s'affiche 10s sur un poste et se ferme automatiquement, une ouverture de session plus lente sur un autre poste aura comme conséquence qu'on ne verra même pas la fenêtre ! (car l'écran bleu "bienvenue" d'un Win7 peut être long... et couvrir ma fenêtre !)

Et je n'ai aucune idée de comment faire ! J'ai testé quelques trucs : lecture tous les X ms de la taille d'écran, état d'une icône dans le systray ; sans succès.

Auriez-vous une piste ou une idée ?

Bruno
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#2

Message par orax »

Le script s'exécute comment ? Registre, tâche planifiée, ... ? Je crois que si le script est dans un des dossiers "Démarrage", il devrait s'exécuter quand le bureau est déjà affiché.

Code : Tout sélectionner

ConsoleWrite(@StartupCommonDir & @CRLF) ; C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
ConsoleWrite(@StartupDir & @CRLF)       ; C:\Users\*****\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Bayo
Niveau 4
Niveau 4
Messages : 79
Enregistré le : mer. 23 avr. 2014 10:19
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#3

Message par Bayo »

oui tu peux mettre ton script dans le dossier démarrage de All Users avec un sleep au début de script pour temporiser si tu veux mais normalement il devrait s'éxécuter une fois que windows a tout chargé
Burnotyo
Niveau 1
Niveau 1
Messages : 13
Enregistré le : jeu. 10 déc. 2009 19:55
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#4

Message par Burnotyo »

Merci pour les réponses,
orax a écrit :Le script s'exécute comment ? Registre, tâche planifiée, ... ? Je crois que si le script est dans un des dossiers "Démarrage", il devrait s'exécuter quand le bureau est déjà affiché.
L'appli est lancée à l'ouverture de session par le poste, depuis un serveur Samba (via un "netlogon") ; en gros, un service (sur lequel je n'ai pas la main) tourne sur le poste, et lance au logon des scripts en fonction de différents paramètres (poste, utilisateur, groupe d'utilisateur).
Le problème est que ce service lance ça de suite, même si Windows n'a pas encore affiché le bureau utilisateur (et qu'il y a encore le fond bleu et le "bienvenue" qui tourne...).
Dans le fonctionnement, je suppose que ça revient à un démarrage spécifique à l'utilisateur (un peu comme avec le dossier démarrage du menu démarrer).
Bayo a écrit :oui tu peux mettre ton script dans le dossier démarrage de All Users avec un sleep au début de script pour temporiser si tu veux mais normalement il devrait s'éxécuter une fois que windows a tout chargé
Pour l'instant, j'utilise déjà une temporisation, paramétrée en fonction de l'OS : je n'ai pas mis le même délai pour les XP, Vista, 7 et 8. Mais malgré cela, j'ai encore des postes (sous 7 par exemple) où on arrive à la toute fin de la fenêtre, et d'autres où on attend que ça se lance...

Code : Tout sélectionner

$int_delai_demarrage = 0
$delai = IniRead($fichier_ini, "OSDelay", @OSVersion, $int_delai_demarrage)
ConsoleWrite("@OSVersion = " & @OSVersion & " ; Délai ini : " & $delai & @CRLF)
If ((StringIsDigit($delai) = 0) Or ($delai > 120)) Then
    $delai = $int_delai_demarrage
Else
    $delai = Number($delai)
EndIf
Sleep($delai * 1000)
En gros, j'ai un délai dans un fichier INI du genre "Win_XP = 5", "WIN_7 = 10", mais ça ne convient pas vraiment. Et comme je ne voulais pas faire de la temporisation poste par poste (y'en a près de 200 !), je cherchais à savoir QUAND est-ce que le bureau est affiché, pour pouvoir lancer l'affichage de mon message à ce moment-là.

Je ne sais pas si j'ai réussi à bien expliquer.

Bruno

(Edit : ajout du code)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#5

Message par jguinch »

Bon, j'ai pas testé pas pourquoi pas...
L'idée est de dire que "tant qu'il n'y a pas d'icônes sur le bureau", je reste dans la boucle :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Bayo
Niveau 4
Niveau 4
Messages : 79
Enregistré le : mer. 23 avr. 2014 10:19
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#6

Message par Bayo »

peut-être idiot mais en attendant le processus explorer.exe? je sais pas si il est lancé lors du Bienvenue de Seven mais je pense pas.
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#7

Message par GhostLine »

L'idée serait de chercher le dernier processus qui démarre (quitte à en faire un "dummy" qui te servirait de "marqueur"), et d'attendre qu'il s'exécute, non ? Après, je suggère, mais je ne sais pas comment faire ;)
Burnotyo
Niveau 1
Niveau 1
Messages : 13
Enregistré le : jeu. 10 déc. 2009 19:55
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#8

Message par Burnotyo »

Bonsoir à tous, et merci pour vos idées.

Je suis parti sur la proposition de jguinch :
jguinch a écrit :L'idée est de dire que "tant qu'il n'y a pas d'icônes sur le bureau", je reste dans la boucle
Avec un code qui m'affiche ensuite les "chronos" d'Autoit, modifié pour ne pas resté dans une boucle infinie (au pire, 10s de sleep) :
► Afficher le texte
Sur mon PC perso, j'ai toujours 2 valeurs identiques à l'ouverture de session. Sur un PC au boulot, j'ai près de 11 secondes d'écart ! Et effectivement, le bureau est longuet à s'afficher.
Je vais me bidouiller mon appli pour que si c'est moi qui ouvre une session ça m'affiche toutes ces infos : instant de lancement, instant où le _WaitDesktop est bon, etc...

C'est peut-être une bonne piste, merci à tous.
(pour les autres propositions, mystère quant à comment faire !)

Bruno
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#9

Message par orax »

J'avais eu la même idée que Bayo mais ça ne marchait pas bien sur Windows 8. Explorer était exécuté après l'ouverture de session, mais sur Win 8 c'est l'interface "modern UI" qui s'affiche par défaut après l'ouverture de session et non le bureau. J'avais fait ce truc pour voir à quel moment explorer était exécuté.

Code : Tout sélectionner

Do
    Sleep(100)
Until ProcessExists("explorer.exe")
FileWriteLine('C:\Users\******\Desktop\b.txt',@MIN & ':' & @SEC)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Burnotyo
Niveau 1
Niveau 1
Messages : 13
Enregistré le : jeu. 10 déc. 2009 19:55
Status : Hors ligne

Re: [..] Savoir si le bureau est affiché

#10

Message par Burnotyo »

Oui, je vais finir par un truc comme ça, parce que l'autre solution ne donne rien de concluant.
Et j'ai pas envie de faire une analyse de boot, c'est trop long.
Répondre