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

API, COM et SDKs Delphi Discussion :

[DELPHI6][API] SendMessage


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 81
    Points : 50
    Points
    50
    Par défaut [DELPHI6][API] SendMessage
    Bonjour,

    J'essaye de me familiriser avec la fonction SendMessage. Si j'ai bien compris on peut à partir d'une application Windows envoyer un message à une autre application Windows.

    Pour ce faire j'ai écrit deux programmes en Delphi (test).

    Le premier contient une procedure sur l'évènement "WM_COPYDATA" et trace dans un mémo son exécution. Au démarrage il affiche le handle de la form.

    Le second lui exécute tous les n millisecondes la fonction SendMessage sur le handle du premier programme.

    Le problème c'est que ça ne marche pas. La plupart des exemples que j'ai vu sur le net "SendMessage" est exécuté à l'intérieur de l'application mais selon les infos que j'ai lues normalement il n'y a pas de problème on peut l'utiliser entre applications.

    Merci de m'éclairer sur ce sujet.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Peux tu nous montrer des extraits de code significatifs ?

  3. #3
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut Re: [DELPHI6][API] SendMessage
    Bonjour, tu as un vice de forme , car deux process ne partagent pas aussi simplement la valeur de leurs variables.

    Ainsi dans le premier process le handle de l'application est bien définis, j'imagine que tu le stocke dans une var globale.

    Dans le deuxième process, cette valeur est indéterminée, ton message n'arrive pas à bon port.

    Pour tester ce genre de fonction, créais-toi un message propriaitaire qui ne concerne que tes deux applis.

    Citation Envoyé par Desraux
    Bonjour,

    J'essaye de me familiriser avec la fonction SendMessage. Si j'ai bien compris on peut à partir d'une application Windows envoyer un message à une autre application Windows.

    Pour ce faire j'ai écrit deux programmes en Delphi (test).

    Le premier contient une procedure sur l'évènement "WM_COPYDATA" et trace dans un mémo son exécution. Au démarrage il affiche le handle de la form.

    Le second lui exécute tous les n millisecondes la fonction SendMessage sur le handle du premier programme.

    Le problème c'est que ça ne marche pas. La plupart des exemples que j'ai vu sur le net "SendMessage" est exécuté à l'intérieur de l'application mais selon les infos que j'ai lues normalement il n'y a pas de problème on peut l'utiliser entre applications.

    Merci de m'éclairer sur ce sujet.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Ci-joint le code pour tester la fonction SendMessage

    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
    Unit1 envoie WM_COYDATA vers Unit2
     
    //**********************************************************
    unit Unit1;
     
    interface
     
    uses
      Messages, SysUtils, Windows,Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        CheckBox1: TCheckBox;
        procedure Timer1Timer(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    // Pour vérifier que le code ici s'exécute
    Beep(1000,50);
    // Edit1.text contient la valeur du handle du programme destinataire
    SendMessage(StrToInt(Edit1.Text),WM_COPYDATA,0,0);
    end;
     
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
    // Pour vérifier la valeur du message WM_COPYDATA
    // ShowMessage(IntToStr(WM_COPYDATA));
    Timer1.Enabled:=Checkbox1.Checked;
    end;
     
    end.
    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
     
    //**********************************************************
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        Memo1: TMemo;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure OnCopyData(var Msg : TMessage); message WM_COPYDATA;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    Procedure TForm1.OnCopyData(var Msg : TMessage);
    Begin
    Memo1.Lines.Add('OnCopyData');
    End;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    // ShowMessage(IntToStr(WM_COPYDATA));
    Edit1.Text:=IntToStr(Form1.Handle);
    SendMessage(Handle,WM_COPYDATA,0,0);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Edit1.Text:=IntToStr(Form1.Handle);
    end;
     
     
    end.
    Balises code ajoutées par Laurent Dardenne

  5. #5
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Merci pour les infos.

    D'abord j'ai vu que j'utilisait mal le message WM_COPYDATA, il doit être complété par wParam et lParam.

    Ensuite pour les messages entre applications j'utilise RegisterWindowMessage.

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

Discussions similaires

  1. Canceliser l'appel API sendmessage
    Par yann458 dans le forum Windows
    Réponses: 4
    Dernier message: 30/01/2012, 19h05
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 16h28
  3. [DELPHI6] Et SendMessage
    Par Desraux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 16h06
  4. [DELPHI6][API Windows] Fenêtre - Process
    Par Desraux dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 02/06/2005, 18h55
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 22h45

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