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

Lazarus Pascal Discussion :

Création d'un programme en background scrutant le clavier


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Création d'un programme en background scrutant le clavier
    Bonjour à tous,

    Je cherche à réaliser un petit programme , mais m'aperçois qu'il me manque les briques de bases pour pouvoir commencer.
    Je sollicite donc votre aide pour me mettre sur la piste .

    Objectif:
    Créer un programme Windows qui:
    1. tournerait en background (rendant la main une fois lancé)
    2. serait en attente de certains combinaisons de touches du clavier (pour actions ou pour arrêt)
    3. serait capable d'afficher au premier plan de l'écran (et donc par dessus une éventuelle application graphique en cours) à un endroit déterminé un caractère ( ou une icone) .

    Je pense que des infos doivent déjà exister sur cet excellent forum , mais je n'ai pas du utiliser les bons mots clés car je n'ai pas réussi à trouver les réponses à mes questions.

    D'avance merci pour votre aide.

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par LeMontois Voir le message
    Bonjour à tous,

    Je cherche à réaliser un petit programme , mais m'aperçois qu'il me manque les briques de bases pour pouvoir commencer.
    Je sollicite donc votre aide pour me mettre sur la piste .

    Objectif:
    Créer un programme Windows qui:
    1. tournerait en background (rendant la main une fois lancé)
    2. serait en attente de certains combinaisons de touches du clavier (pour actions ou pour arrêt)
    3. serait capable d'afficher au premier plan de l'écran (et donc par dessus une éventuelle application graphique en cours) à un endroit déterminé un caractère ( ou une icone) .

    Je pense que des infos doivent déjà exister sur cet excellent forum , mais je n'ai pas du utiliser les bons mots clés car je n'ai pas réussi à trouver les réponses à mes questions.

    D'avance merci pour votre aide.
    Bonsoir,

    Il y a en effet eu au moins une discussion sur le sujet (au moins approchant) :
    http://www.developpez.net/forums/d12...i/#post6590591

    En espérant que les indications données pourront vous aider,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut Application BackGround sous Lazarus
    Bonjour..

    J'ai récemment résolu une problématique identique. Cela consiste a faire en sorte que la fenêtre principale ne s'affiche pas au démarrage et à utiliser un menu surgissant associé à une icône dans la zone de notification (au lieu de raccourcis clavier). J'ai procédé ainsi :

    1) Pour empêcher la fenêtre principale de l'application de s'afficher au démarrage j'ai ajouté la ligne suivante dans le programme principal, (avant la ligne Application.Run) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ShowMainForm := false;
    Application.Run;

    2) J'ai créé un composant TTrayIncon (onglet Comon controls de la palette), fixé sa propriété Visible := true; et affecté une icône (fichier .ico) à sa propriété Icon (c'est l'icône qui apparaît dans la zone de notification).


    3) J'ai ensuite créé un composant TPopUpMenu et l'ai affecté à la propriété PopUpMenu du TTrayIcon. C'est ce menu qui s'affiche par un clic droit sur l'icône de la zone de notification. Programmer dans ce menu toutes les commandes nécessaires à l'application (affichage de dialogue, fermeture, etc.). On peut aussi exploiter l'événement OnClick du TTrayIcon (clic gauche sur l'icône).


    4) Pour les notifications il y a plusieurs possibilités :
    • indication visuelle en changeant dynamiquement l'icône dans la zone de notification. Par exemple en stockant les différentes icônes dans un TImageList puis en codant :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonImageList.GetIcon(x, MaTrayIcon.Icon);
      x étant l'index de l'icône voulue dans MonImageList. Le changement d'icône est immédiatement visible dans la zone de notification.

    • Utiliser un composant TPopUpNotifier (onglet Common controls de la palette). C'est une boîte sans bordure, comportant un titre, un texte, éventuellement une Icône et enfin un bouton de fermeture.
      Elle peut s'afficher à un endroit quelconque de l'écran (Méthode ShowAtPos).
      Si on veut qu'elle s'affiche au premier plan (toutes applications confondues) il faut programmer explicitement (ce n'est pas une propriété accessible dans l'inspecteur d'objets) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      PopUpNotifier1.vNotifierForm.FormStyle:= fsSystemStayOnTop;
    • Enfin plus classiquement on peut afficher des boites message ou dialogues en mode modal.


    Voilà, si tu veux plus de détails je suis à ta disposition.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci à tous pour toutes ces pistes .
    Je vais regarder et intégrer tout cela et reviendrai vers vous.

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par LeMontois Voir le message
    Objectif:
    Créer un programme Windows qui:
    1. tournerait en background (rendant la main une fois lancé)
    Il suffit de réaliser une application (visible ou pas, minimisée ou pas, dans la barre Systray ou pas) qui ne se ferme pas et reste en sommeil tant qu'un des événements à surveiller n'est pas intercepté.

    Citation Envoyé par LeMontois Voir le message
    2. serait en attente de certains combinaisons de touches du clavier (pour actions ou pour arrêt)
    Il s'agit de mettre en place un "hook" qui interceptera les événements avant qu'ils n'arrivent à l'application destinataire : http://melem.developpez.com/tutoriel...dlls/#LIII-B-3

    Il existe une bibliothèque qui malgré son nom est compatible avec FPC/Lazarus et facilite la mise en œuvre des hooks : https://code.google.com/p/delphi-detours-library/

    Citation Envoyé par LeMontois Voir le message
    3. serait capable d'afficher au premier plan de l'écran (et donc par dessus une éventuelle application graphique en cours) à un endroit déterminé un caractère ( ou une icone) .
    Cet affichage est propre à l'application qui tourne en tache de fonds ou à une application cible qui est au premier plan ?
    Dans le second cas, il va falloir identifier les fenêtres ciblées et récupérer leur handle (EnumWindows, EnumChildWindows et FindWindow) pour leur transmettre les informations
    Philippe.

  6. #6
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    @Ph. B.: La bibliothèque delphi-detours ne permet pas a priori de placer des "hooks" SetWindowsHookEx (celle-ci se concentre plus sur l'interception/remplacement des fonction de l'API win32/objets COM, etc).

    Du coup faut faut SetWindowsHookEx à la main
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Encore merci pour vos réponses mais mes disponibilités ne me permettent malheureusement pas d'avancer comme je le voudrais sur le sujet .

    Juste une chose , je n'arrive pas à récupérer la bibliothèque pointée par Ph.B. ... y'a un truc ?
    Car en effet ,les Hook devraient me sauver .
    Est-il aussi possible de trapper les évènements d'un Joystick avec cette bibliothèque (cela fait partie des évènements que je devrai scruter) ?

    Je ne sais pas si c'est clair dans mon exposé du problème , mais ce que je souhaite c'est juste écouter et détecter certains évènements (clavier ou joystick) et afficher en surimpression sur l'écran d'une autre application un caractère ou un icone .
    L'application principale ne devant pas être perturbée par mon programme .

  8. #8
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Hum, apparament ce serait pas possible de hooker un joystick (cf http://www.gamedev.net/topic/201960-...joystick-hook/), et faut tripoter du DirectInput () pour se faire.

    Sinon la bibliothèque pointée par Ph. B. te sera inutile ici (elle n'implémente pas le même type de "hooks" que ce que tu veux faire), il faut te servir de SetWindowsHookEx (par défaut dans l'API Win32) pour cela.
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/09/2006, 09h55
  2. Création d'un programme de Gestion / compta : langage ?
    Par Alexino2 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 11/04/2006, 15h00
  3. Réponses: 10
    Dernier message: 31/01/2006, 11h36
  4. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  5. Création installer pour programme
    Par yanndublanche dans le forum Windows
    Réponses: 7
    Dernier message: 11/10/2005, 00h29

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