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

Langage Delphi Discussion :

[XE2] Raccourci windows intercepté par mon appli


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut [XE2] Raccourci windows intercepté par mon appli
    Bonjour

    Je met mon appli dans la barre des tâches avec le TTrayIcon.

    Quel serait le moyen le plus simple pour intercepter une frappe de touches style raccourci (Ctrl+F12 par exemple) dans un évènement de mon soft ?

    Est-ce qu'il y a plus simple que de mettre un hook sur le système ?

    J'ai besoin que ça fonctionne de XP à seven.

    Papy !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Points : 76
    Points
    76
    Par défaut
    Pour intercepter tout les appuis de touche dans ton soft, sur la fiche principale tu peux mettre le KeyPreview à true et coder un gestionnaire d'événement sur OnKeyDown ou OnKeyUp (je n'utilise pas OnKeyPress car il ne donne pas l'état des touches Ctrl/Alt/Shift..).
    Par contre, n'utilisant pas TTrayIcon, je ne saurais pas dire si ma réponse correspond exactement à ce que tu cherches.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 560
    Points : 25 156
    Points
    25 156
    Par défaut
    Citation Envoyé par istam3 Voir le message
    Par contre, n'utilisant pas TTrayIcon, je ne saurais pas dire si ma réponse correspond exactement à ce que tu cherches.
    C'est surement le problème que rencontre Papy214
    Il doit vouloir capturer "Ctrl+F12" même lorsque la fenêtre de son programme est inactive, ou même invisible !

    Le Hook me semble cohérent, ce n'est qu'une toute petite DLL à mettre en place !
    Ou alors, un peu dégueux, un GetAsyncKeyState dans un TTimer à 50 ms !
    Si la touche F12 est pressé au moment du GetAsyncKeyState(VK_F12), cela renvoie $8000
    Si la touche CTRL est pressé au moment du GetAsyncKeyState(VK_CONTROL), cela renvoie $8000

    Tu peux tester les deux ensembles, vu que l'on presse facilement au moins 50ms, j'ai testé, ça fonctionne
    Il est presque difficile de presse moins de 50ms, tu peux le descendre à 10 (tu n'auras pas mieux)

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut
    Même si c'est degueu, ça ira très bien. C'est juste pur un utilitaire interne.

    Merci !

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    Par défaut
    Ce genre de raccourci se ferait plutôt par Hot Key. Enregistrer la combinaison et gérer le message WM_HOTKEY:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        HotKey :TAtom;
        procedure WMHotKey(var Message :TWMHotKey); message WM_HOTKEY;
      end;
     
    var
      Form1 :TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      HotKey := GlobalAddAtom('MyHotkey');
      RegisterHotKey(Handle, HotKey, MOD_CONTROL, VK_F12);
    end;
     
    procedure TForm1.WMHotKey(var Message: TWMHotKey);
    begin
      Caption := DateTimeToStr(Now);
    end;
     
    end.

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut
    Je viens d'apprendre un truc là.
    Merci

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut
    Par contre, le RegisterHotKey ne demande pas un "unregister" quelconque en sortie de programme ??

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    Par défaut


    UnregisterHotKey, GlobalDeleteAtom

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut
    Thanks a lot ! :-)

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 410
    Points : 307
    Points
    307
    Par défaut
    Très intéressant, cela mérite une inscription dans la FAQ

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 458
    Points : 3 090
    Points
    3 090
    Par défaut
    Citation Envoyé par Bernard B Voir le message
    Très intéressant, cela mérite une inscription dans la FAQ
    + 1 ... et même + 2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/10/2010, 15h07
  2. [C#2005] Supprimer un fichier utiliser par mon appli
    Par Herlece dans le forum Windows Forms
    Réponses: 9
    Dernier message: 09/09/2008, 17h06
  3. Ressources GDI utilisées par mon appli
    Par Bobx dans le forum Delphi
    Réponses: 1
    Dernier message: 27/10/2006, 17h40
  4. Problème de mon appli sous windows 2000
    Par chourmo dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 12h03
  5. Réponses: 5
    Dernier message: 11/03/2005, 16h48

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