Comment charger les items d'une syslistview d'une application externe ?
ramanovitch
Messages postés8Date d'inscriptionsamedi 25 août 2007StatutMembreDernière intervention 2 septembre 2007
-
28 août 2007 à 13:39
ramanovitch
Messages postés8Date d'inscriptionsamedi 25 août 2007StatutMembreDernière intervention 2 septembre 2007
-
30 août 2007 à 21:05
Bonjour a tous , je souhaite savoire comment charger le contenu d'un syslistview d'une
application externe dans une liste de mon application "delphi", j'ai utiliseé
LVM_GETITEMTEXT mais ca n'a pas marcher voici le code que j'utilise pour extraire les items
d'une liste syslistview d'une autre application((externe faite avec language autre que
delphi)) et le metre dans listbox1 :
procedure TForm1.Button1Click(Sender: TObject);
const Mx = 4095; //taille du buffer - 1
var
Chain : TBuffer; //buffer
LvmItem : TLVItem; //item de liste visuelle
Hwd, //handle du composant à intercepter
idx, //index de défilement
subidx, //index de sous-défilement
LenStr : integer; //longueur d'une chaîne récupérée
begin
Hwd: =StrToInt(edit1.Text); // om met le handle de syslistview dans edit1
LvmItem.cchTextMax:= Mx+1; //spécifie la taille du buffer
LvmItem.pszText:=Chain; //définit le buffer
for idx: =0 to SendMessage(Hwd,LVM_GetItemCount,0,0)-1 do //on récupère le nombre d'item dans la liste visuelle
subidx:=0
LvmItem.iSubItem:=subidx; //précisons la profondeur désirée
LenStr:=SendMessage(Hwd,LVM_GetItemText,idx,Longint(@LvmItem)); //on récupère
le texte...
if LenStr>0 then
listbox1.Items.Add(LevelToTabs(subidx)+LvmItem.pszText); //...pour l'ajouter
end;
mais ca n'a pas marcher ca ne fonctionne qu'avec les applications faites avec delphi ; ya il
d'autre methodes pour les autre applications ?
et merci .
A voir également:
Comment charger les items d'une syslistview d'une application externe ?
if LenStr>0 then
listbox1.Items.Add(LevelToTabs(subidx)+LvmItem.pszText);
Dans ce cas, ta boucle n'exécute que la première ligne de ton code. Et donc tu ne transmets le paramètre idx qu'avec la valeur 0. De plus, stocker le premier appel dans une variable evitera qu'à chaque boucle un appel au sendmessage soit généré.
Pour que ton code soit plus propre, il vaudrait mieux ecrire :
Count := SendMessage(Hwd,LVM_GetItemCount,0,0) ;
subidx := 0;
for idx:=0 to Count-1 do
begin
LvmItem.iSubItem:=subidx;
LenStr:=SendMessage(Hwd,LVM_GetItemText,idx,Longint(@LvmItem));
if LenStr>0 then
listbox1.Items.Add(LevelToTabs(subidx)+LvmItem.pszText);
end;
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
ramanovitch
Messages postés8Date d'inscriptionsamedi 25 août 2007StatutMembreDernière intervention 2 septembre 2007 30 août 2007 à 21:05
merci pour ton message; au fait avec le copie coller j'ai oublier de metre les begin end; (dans le message) ;
mais je tien a preciser que meme avec la version corrigée j'arrive pas a charger le contenu de syslistview de l'application externe dans listbox1 de mon application , cela ne peut se faire qu'avec les applications faites avec delphi;
avez vous une autre methode pour cela et si delphi ne peut pas faire ça avez vous un code c++ builder qui peut le faire;