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

Delphi Discussion :

Intercepter des messages non destinés à mon application


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    DCD
    DCD est déconnecté
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut Intercepter des messages non destinés à mon application
    Voilà... TOut est dans le titre...

    En fait, j'ai une télécommande, elle envois un message

    APPCOMMAND_MEDIA_PLAY = $2E0000; ( par exemple ) à windows... Si le media player est en route, il prend en compte ce message... MEME SI IL N'A PAS LE FOCUS !!!!

    J'aimerai faire de même avec mon appli ( qui n'arrive même pas à toper le message même avec le focus ! ).

    j'utilise un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm.WMAppCommand(var Msg: TMessage);
    begin
      if Msg.LParam = APPCOMMAND_MEDIA_PLAY then 
        ... MON ACTION ...
      inherited;
    end;
    Par contre, en envoyant à ma fiche, avec un bouton, APPCOMMAND_MEDIA_PLAY de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      PostMessage(Handle, WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY);
    end;
    "MON ACTION" s'execute très bien !!!

    Si quelqu'un peu m'aider...

    Merci.

    DeeTOX.

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Regarde du côté de la fonction GetMessage peut-être...

  3. #3
    DCD
    DCD est déconnecté
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut Nein
    Non, ca marche pas avec cette fonction... J'ai fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    Msg : TMsg;
    begin
      While GetMessage(Msg, 0, 0, 0) Do
      Begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
        label1.caption := inttostr(msg.wParam)+' ' +inttostr(msg.lParam);
        application.processmessages;
      End;
    end;
    Et rien ne change dans label1 lorsque APPCOMMAND_MEDIA_PLAY est envoyé ! :-s !

    Merci quand même !

    Une autre idée ?

    DeeTOX.

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    DCD
    DCD est déconnecté
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut
    Sorry patron !

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par DCD
    Sorry patron !
    Pas grave du moment que ça ne se reproduise plus Sinon
    En tout cas, ce sujet m'intéresse au plus haut point: j'aimerais pouvoir intercepter la ribambelle de messages de Messenger... Mais je n'y suis pas arrivé non plus
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    As-tu essayer le code donné ci-dessus ?
    Tu remarqueras que l'handle utilisé est HWND(-1) et non 0...
    Peut-être que ça fonctionne, je ne l'ai pas testé.

  8. #8
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Salut,

    En ce qui concerne l'interception (lorsque la form est active seulement) du play/pause du clavier, il est possible de procéder comme suit (ou d'utiliser WndProc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    type
      TForm1 = class(TForm)
      protected
        procedure WmAppCommand(var Message: TMessage); message WM_APPCOMMAND;
      end;
     
    (...)
     
    procedure TForm1.WmAppCommand(var Message: TMessage);
    begin
      if Message.LParamHi = APPCOMMAND_MEDIA_PLAY_PAUSE then
        MessageDlg('play !', mtWarning, [mbOK], 0);
    end;
    En ce qui concerne l'interception de ce même message lorsqu'il est envoyé à une autre application, je ne connais que les hooks comme solution potentielle, mais c'est bien super chiant à faire et c'est pas gagné...


    Pour ceux qui veulent jouer à autre chose qu'au play/pause, Message.LParamHi peut aussi (semble-t-il) potentiellement contenir ces constantes :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
      APPCOMMAND_BROWSER_BACKWARD       = 1;
      APPCOMMAND_BROWSER_FORWARD        = 2;
      APPCOMMAND_BROWSER_REFRESH        = 3;
      APPCOMMAND_BROWSER_STOP           = 4;
      APPCOMMAND_BROWSER_SEARCH         = 5;
      APPCOMMAND_BROWSER_FAVORITES      = 6;
      APPCOMMAND_BROWSER_HOME           = 7;
      APPCOMMAND_VOLUME_MUTE            = 8;
      APPCOMMAND_VOLUME_DOWN            = 9;
      APPCOMMAND_VOLUME_UP              = 10;
      APPCOMMAND_MEDIA_NEXTTRACK        = 11;
      APPCOMMAND_MEDIA_PREVIOUSTRACK    = 12;
      APPCOMMAND_MEDIA_STOP             = 13;
      APPCOMMAND_MEDIA_PLAY_PAUSE       = 14;
      APPCOMMAND_LAUNCH_MAIL            = 15;
      APPCOMMAND_LAUNCH_MEDIA_SELECT    = 16;
      APPCOMMAND_LAUNCH_APP1            = 17;
      APPCOMMAND_LAUNCH_APP2            = 18;
      APPCOMMAND_BASS_DOWN              = 19;
      APPCOMMAND_BASS_BOOST             = 20;
      APPCOMMAND_BASS_UP                = 21;
      APPCOMMAND_TREBLE_DOWN            = 22;
      APPCOMMAND_TREBLE_UP              = 23;
      APPCOMMAND_MICROPHONE_VOLUME_MUTE = 24;
      APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25;
      APPCOMMAND_MICROPHONE_VOLUME_UP   = 26;
      APPCOMMAND_HELP                   = 27;
      APPCOMMAND_FIND                   = 28;
      APPCOMMAND_NEW                    = 29;
      APPCOMMAND_OPEN                   = 30;
      APPCOMMAND_CLOSE                  = 31;
      APPCOMMAND_SAVE                   = 32;
      APPCOMMAND_PRINT                  = 33;
      APPCOMMAND_UNDO                   = 34;
      APPCOMMAND_REDO                   = 35;
      APPCOMMAND_COPY                   = 36;
      APPCOMMAND_CUT                    = 37;
      APPCOMMAND_PASTE                  = 38;
      APPCOMMAND_REPLY_TO_MAIL          = 39;
      APPCOMMAND_FORWARD_MAIL           = 40;
      APPCOMMAND_SEND_MAIL              = 41;
      APPCOMMAND_SPELL_CHECK            = 42;
      APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE    = 43;
      APPCOMMAND_MIC_ON_OFF_TOGGLE      = 44;
      APPCOMMAND_CORRECTION_LIST        = 45;
      APPCOMMAND_MEDIA_PLAY             = 46;
      APPCOMMAND_MEDIA_PAUSE            = 47;
      APPCOMMAND_MEDIA_RECORD           = 48;
      APPCOMMAND_MEDIA_FAST_FORWARD     = 49;
      APPCOMMAND_MEDIA_REWIND           = 50;
      APPCOMMAND_MEDIA_CHANNEL_UP       = 51;
      APPCOMMAND_MEDIA_CHANNEL_DOWN     = 52;
    Enfin à titre informatif :

  9. #9
    DCD
    DCD est déconnecté
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut Désolé de pas avoir répondu
    désolé de pas avoir répondu avant, j'avais du taf...

    Alors, DMO, merci, ca fonctionne impec avec les messages rentrant direct dans mon appli... Mais je panique toujours pour toper ceux des autres applications...

    Je crois que je vais me débrouillé sans...

    deeTOX.

  10. #10
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Pas de quoi
    Citation Envoyé par DCD
    je panique toujours pour toper ceux des autres applications...
    Citation Envoyé par DMO
    En ce qui concerne l'interception (lorsque la form est active seulement) (...)
    Citation Envoyé par DMO
    En ce qui concerne l'interception de ce même message lorsqu'il est envoyé à une autre application, je ne connais que les hooks comme solution potentielle, mais c'est bien super chiant à faire et c'est pas gagné...
    Citation Envoyé par DCD
    Je crois que je vais me débrouillé sans...
    ça facilitera pas mal les choses en effet !

  11. #11
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    je ne sais pas si c'est possible, mais j'ai déjà lu quelque part qu'on peut enrgistré un message (différtent de ceux de windows) pour qu'on le resoit (avec un peut de bricolage et les jhook bien sur) dés qu'il circulle
    ??????????

Discussions similaires

  1. Probleme interception des messages
    Par dalton5 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/09/2009, 14h32
  2. Interception des messages NetSend
    Par Flow_75 dans le forum C
    Réponses: 0
    Dernier message: 22/05/2008, 13h27
  3. Interception des messages windows
    Par sunchai dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/08/2005, 10h31
  4. Interception des messages CLAVIER
    Par dede92 dans le forum Windows
    Réponses: 10
    Dernier message: 03/03/2005, 17h47

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