WM_GetTextLength , WM_GetText , LB_GetCount , LB_SetCurSel , LB_GetTextLen , LB_GetText , TVM_GetCount , TVIF_Text , TVM_GetItem , LVM_GetItemCount , LVM_GetItemText
Palette d'utilisation pour extraire du texte des fenêtres et composants affichés sous Windows.
Supporte pleinement :
- Static
- Combo
- Edit
- ListBox
- Dialog
Supporte moyennement :
- SysListView (que sur les applications Delphi)
Non encore supporté:
- SysTreeView
Au final, on gagne beaucoup de temps.
Source / Exemple :
procedure TfrTextSpy.butTransmittClick(Sender: TObject);
const Mx = 4095;
type TSpyBuffer = array[0..Mx] of char;
PSpyBuffer = ^TSpyBuffer;
var Chain : TSpyBuffer;
LvmItem : TLVItem;
TvmItem : TTVItem;
Hwd, NCol, idx,
subidx, LenStr : integer;
DonePrc : LongBool;
begin
LBDest.Items.Clear;
Hwd:=StrToInt(edHwd.Text);
NCol:=StrToInt(edNCol.Text);
case rgType.ItemIndex of
0: begin
LenStr:=SendMessage(Hwd,WM_GetTextLength,0,0);
if LenStr>0 then
begin
SendMessage(Hwd,WM_GetText,LenStr,Longint(@Chain));
LBDest.Items.Add(Chain);
end;
end;
1: for idx:=0 to SendMessage(Hwd,LB_GetCount,0,0)-1 do
begin
if cbDefil.Checked then
SendMessage(Hwd,LB_SetCurSel,idx,0);
LenStr:=SendMessage(Hwd,LB_GetTextLen,idx,0);
if LenStr>0 then
begin
SendMessage(Hwd,LB_GetText,idx,Longint(@Chain));
LBDest.Items.Add(Chain);
end;
end;
2: begin
TvmItem.cchTextMax:=Mx+1;
TvmItem.pszText:=Chain;
for idx:=0 to SendMessage(Hwd,TVM_GetCount,0,0)-1 do
begin
TvmItem.Mask:=TVIF_TEXT;
TvmItem.cChildren:=1;
DonePrc:=LongBool(SendMessage(Hwd,TVM_GetItem,0,Longint(@TvmItem)));
if DonePrc then
LBDest.Items.Add(TvmItem.pszText);
end;
end;
3: begin
LvmItem.cchTextMax:=Mx+1;
LvmItem.pszText:=Chain;
for idx:=0 to SendMessage(Hwd,LVM_GetItemCount,0,0)-1 do
for subidx:=0 to NCol do
begin
LvmItem.iSubItem:=subidx;
LenStr:=SendMessage(Hwd,LVM_GetItemText,idx,Longint(@LvmItem));
if LenStr>0 then
LBDest.Items.Add(LevelToTabs(subidx)+LvmItem.pszText);
end;
end;
end;
end;
Conclusion :
Vous pouvez toujours aller voir
http://altert.family.free.fr/
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.