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 :

récupération d'une chaine de caractère


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut récupération d'une chaine de caractère
    bonjour,

    Je cherche à récupérer une chaine de caractère avec sendmessage , je ne me rappelle pas la synthaxe.

    sendmessage(Handle_Cible, ???, ?,?);

    merci d'avance

    ++

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 165
    Points
    25 165
    Par défaut
    tu peux essayer un truc du genre, j'ai modifié un code que j'ai fait pour une application précise, tu peux récupérer le texte contenu dans un Edit ... maintenant ta question est un peu vague

    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
      function GetEditText(const AppClass, EditClass: string; EditIndex: Integer; out Text: string): Boolean;
      var hWndApp, hEdit: HWND;
          buffer: array[0..4095] of char;
      const BUF_SIZE = 4096;
      begin
         result := False;
         hWndApp:= FindWindow(PChar(AppClass), nil);
         if (hWndApp<> 0) then
         begin
           hEdit := FoundChild(hWndWord, PChar(EditClass), nil, EditIndex);
           if (hEdit <> 0) then
           begin
               Sendmessage(hEdit,WM_GETTEXT, BUF_SIZE , Cardinal(@buffer));
               result := True;
               Text := buffer;
           end;
         end;
      end;

  3. #3
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    merci pour ce coup de main, mais je n'arrive pas à l'appliquer dans ma situation.

    J'envoi une chaine de caractère dans une fenetre genre internet explorer (recherche google dans mon cas) puis j'essai de récupérer la chaine pour pouvoir effacer le dernier caractère taper.

    voila donc le handle je l'ai:

    suivant tes conseils j'ai écrit:

    procedure TForm_Clavier.button_returnClick(Sender: TObject);
    var Text : string;
    begin
    // appui sur boutton retour arrière
    Sendmessage(Handle_Cible, WM_GETTEXT, BUF_SIZE , cardinal(@buffer));
    Text:= buffer;
    edt_buf.text:= (buffer[2]);
    end;
    Mais le edt_buf m'indique une chaine vide, le buffer ne reçois rien.



    Après un test avec un edit box, je vois que la synthaxe marche bien, j'affiche bien la même chose, alors je ne comprends pas mon problème... Le handle de google ( Handle_Cible) n'est il pas bon...


    ... Le problème n'est pas avec ma recherche du handle, puisque en gardant la même synthaxe ( Handle_cible et non edit1.handle), si je reste dans mon application cela fonctionne pour tous les edit de ma form.
    Donc si je sors de mon application ça marche plus...

    je recherche le Handle comme suit:
    procedure TForm_Clavier.Timer1Timer(Sender: TObject);
    begin
    // scrute les déplacement de souris
    BGSouris:= getAsyncKeyState(VK_LButton)<0;
    Handle_Courant:= WindowFromPoint(mouse.CursorPos);
    edt_affich.text:= 'Handle_Courant = ' + inttostr(Handle_Courant);
    if (BGSouris) and ((Handle_Courant) <> (Form_Clavier.Handle)) then begin
    Handle_Cible:= Handle_Courant;
    edit_test.Text:= 'Handle_Cible = ' + inttostr(Handle_Cible);
    end;
    end;
    Pour envoyer une chaine de caractère il n'y a aucun problème...
    ++

  4. #4
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut WM_copy
    Quelqu'un a-til déja utilisé WM_COPY?

  5. #5
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut seulement avec une fenetre web
    La récupération de chainede caractère fonctionne très bien pour toutes les appliations (notepad et barre d'adresse des différents dossiers windows) mais pour les fenetres web il n'y a rien...

    quelqu'un a un conseil, une idée?

    merci

    ++

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Pour les Messages, il ne fonctionne qu'avec certaines classes, j'ignore ton besoin exacte mais si c'est pour chopper le Texte HTML de Internet Explorer, tu devrais lancer la page toi même via un TWebBrowser ...


    Pour WM_COPYDATA, j'ai cette exemple là

    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
     
    type
       TTrucData = record
          I: Integer;
          D: Double;
          C: array[1..60] of Char;
       end;
     
    procedure TFrmTestMemory.BtnSendDataClick(Sender: TObject);
    var
       Truc: TTrucData;
       Data: Windows.PCOPYDATASTRUCT;
    begin
       lblHandleMe.Caption := IntToStr(Self.Handle);
       if StrToIntDef(EdHandleOther.Text, 0) <= 0 then
       begin
          Exit;
       end;
     
       Truc.I := MemoSend.Lines.Count;
       Truc.D := Now();
       CopyMemory(@Truc.C, @MemoSend.Lines.Text[1], 60);
     
       New(Data);
       Data.dwData := 0;
       Data.cbData := SizeOf(Truc);
       Data.lpData := @Truc;
       SendMessage(StrToInt(EdHandleOther.Text), WM_COPYDATA, Self.Handle, LongInt(Data));
     
       Dispose(Data);
    end;
     
    procedure TFrmTestMemory.ReceiveData(var message: TMessage); // directive : message WM_COPYDATA;
    var
       Truc: TTrucData;
       Data: Windows.PCOPYDATASTRUCT;
       Reveive: PChar;
    begin
       if message.LParam > 0 then
       begin
          CopyMemory(@Truc, PCOPYDATASTRUCT(message.LParam).lpData, PCOPYDATASTRUCT(message.LParam).cbData);
     
     
          MemoReceive.Lines.Text := Truc.C;
          MemoReceive.Lines.Add(IntToStr(Truc.I));
          MemoReceive.Lines.Add(FormatDateTime('dddd dd mm yyyy hh:nn:ss zzz', Truc.D));
       end;
    end;

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

Discussions similaires

  1. [Python 2.X] Récupération d'une chaine de caractères dans une page web/HTML
    Par Julien33400 dans le forum Général Python
    Réponses: 2
    Dernier message: 30/10/2014, 09h38
  2. Réponses: 1
    Dernier message: 17/06/2010, 16h10
  3. Réponses: 3
    Dernier message: 17/07/2008, 12h25
  4. [VBA] Récupération d'une chaine à partir d'un caractère spécifié
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/06/2008, 17h57
  5. Réponses: 2
    Dernier message: 14/11/2006, 17h08

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