IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Programme avec juste une icône dans le systray ? (supprimer fenêtre cachée)


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut Programme avec juste une icône dans le systray ? (supprimer fenêtre cachée)
    Bonsoir,

    J'arrive à faire à peu près ce que je veut : un programme (en C) qui ouvre juste une icône dans le systray, seulement, je suis obligé de créer une fenêtre que je n'affiche pas pour avoir la procédure pour pouvoir traiter les messages.

    Ça marche très bien, par contre, juste après avoir lancé le programme, le processus prend 3 Mo alors qu'il ne fait absolument rien (a par afficher l'icône dans le systray) ...

    Comment faire pour que le processus prenne moins de place ?
    Est-il possible de faire la même chose sans passer par une fenêtre que l'on n'affiche pas ?

    Merci.
    Pierre.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Une NotifyIcon est forcément liée à une fenêtre, où elle disparait à l'instant où tu passes la souris dessus.
    Désolé.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut
    Ok, merci Médinoc, donc on ne peut pas faire sans fenêtre.

    La question d'après c'est comment peut-on faire pour que ça prenne moins de place en mémoire ?

    Parce que j'ai regardé sur d'autre programme : par exemple, le programme qui met à jour une adresse dynamique sur le site dyndns.org; en arrière plans, un programme qui fait bien plus de choses que le mien. Ce programme démarre en n'affichant qu'une icône dans le systray, comme le mien, mais consome seulement 700 Ko.

    Peut-on y faire quelque chose ?
    Faut-il faire une classe un peu spécial pour ce cas là ?

    Merci.
    Pierre.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Le problème, c'est que je ne sais pas trop quelles DLLs ça charge...

    Je sais que tu ne peux pas te passer de la CRT, car même si tu fais un programme qui ne l'utilise pas, lors de la création d'une fenêtre, USER32.DLL charge UXTHEME.DLL qui charge (directement ou non, je ne sais plus) la CRT.
    Par contre, tu peux sûrement te passer du runtime C++ (MSVCPRxx.DLL, qui contient la STL), qui il me semble n'est chargée par aucune autre DLL (bref, un projet C devrait être moins encombrant qu'un projet C++).

    Et puis, le calcul de la mémoire occupée est plus complexe qu'une simple "mémoire occupée par le processus", car le code d'une DLL en mémoire peut être partagé... Donc si ça se trouve, ton programme n'ajoute pas tant que ça à la charge globale du système...

    Edit: Une idée: Regarde si les NotifyIcon marchent avec les Message-only windows, qui sont plus légères. Peut-être que USER32.DLL ne charge pas autant d'autres DLLs si tu ne crées pas de fenêtres "lourdes"...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut
    Je vien d'essayer avec une "message-only window", ça n'a rien changé (normalement j'ai fait ce qu'il faut puisque la fenêtre ne s'affiche plus avec ShowWindow).

    Je ne peut pas me permettre de passer trop de temps là dessus, en plus je n'ai pas les compétences pour trouver ce qu'il faut, donc je laisse ça comme ça pour l'instant.

    Merci pour ton aide.

    Pierre.

Discussions similaires

  1. [AC-2003] Supprimer une icône dans systray
    Par Geache dans le forum VBA Access
    Réponses: 5
    Dernier message: 16/12/2011, 08h39
  2. Réponses: 5
    Dernier message: 05/03/2006, 14h39
  3. [VB6] Problème avec insertion d'icônes dans menu
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/03/2006, 21h38
  4. [VB6] Icône dans le systray + Menu contextuel
    Par Vince dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 18/08/2005, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo