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
++
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
++
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;
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:
Mais le edt_buf m'indique une chaine vide, le buffer ne reçois rien.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;
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:
Pour envoyer une chaine de caractère il n'y a aucun problème...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;
++
Quelqu'un a-til déja utilisé WM_COPY?
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
++
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;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager