begin process at 2012 05 29 00:56:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Comment lister un syslisteview d'une application externe dans une list box ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment lister un syslisteview d'une application externe dans une list box ?

mercredi 29 août 2007 à 20:04:46 | Comment lister un syslisteview d'une application externe dans une list box ?

ramanovitch

Bonjour,

je suis débutant en matiere de programmation et je travail sous Borland c++ builder ,et je

souhaite savoire comment peut on extraire les items d'une syslisteview située dans une aute

application que la mienne et metre les items dans une listbox1 de mon application,je sais

qu'il faut utiliser LVM_GETITEMTEXT comme message, mais comment ! je sais pas !
dans mon programme je place dans la fiche un Button1 et une ListBox1,
pourriez vous m'indiquer le code a metre dans le Button1 c'est a dire dans :
[CODE]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// ici       
}
[/CODE]
et merci d'avance.

jeudi 30 août 2007 à 15:12:32 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Bah il te faut surtout le handle de fenêtre du contrôle (Souvent appelé hwnd).

La msdn précise bien comment employer ce message.

Pour récupérer le handle de fenêtre du contrôle, il te faudrat bien connaître la structure de fenêtre de l'application tierce, par exemple avec spy++, puis utiliser par exemple EnumWindows/EnumChildWindows dans ton programme.



jeudi 30 août 2007 à 19:57:10 | salut

ramanovitch

une fois que j'ai le handle ,comment utiliser cette fonction;
franchement je sais pas quoi metre dans (LPARAM) lParam ; en plus faut il d'autre fonctions pour acceder au syslistview de l'application externe ou un sendmessage avec LVM_GETITEMTEXT suffi ?

jeudi 30 août 2007 à 20:06:28 | précision

ramanovitch

fonction =

lResult = SendMessage(     // returns LRESULT in lResult
   (HWND) hWndControl,     // handle to destination control
   (UINT) LVM_GETITEMTEXT,     // message ID
   (WPARAM) wParam,     // = (WPARAM) (int) iItem;
   (LPARAM) lParam     // = (LPARAM) (LPLVITEM) pitem;
 que faut il metre dans (LPARAM) lParam ; et comment acceder a la syslistview de l'autre application ? le handle lui seule suffi ?
jeudi 30 août 2007 à 21:18:19 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

rt15

Membre Club Administrateur CodeS-SourceS
Une fois que tu as le handle, SendMessage suffit. Commence par mettre 0 dans lparam. En WPARAM, il faut mettre l'adresse d'une struture LVITEM à ce que j'ai compris. Tout est expliqué sur le lien que je t'ai donné.
jeudi 30 août 2007 à 23:05:40 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

ramanovitch

j'avoue que j'ai pas bien compris,mais c'est quoi structure LVITEM ?
Donne moi tout petit example svp
et merci pour votre aide .
vendredi 31 août 2007 à 08:58:49 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

rt15

Membre Club Administrateur CodeS-SourceS
LVITEM, c'est une structure qui va acceuillir les infos suite à ton LVM_GETITEMTEXT.

Le texte contenu dans l'item sera pointé par le membre pszText de cette structure.

Cette structure tu t'en sers un peu comme un saut, et c'est le SendMessage qui va le remplir, avec notamment le texte de l'item.

Pour le petit exemple, j'ai un peu la flemme, pas VC2005 sur ce poste, et pas trop le temps chez moi. Mais ça doit tout bêtement ressembler à ça :

LVITEM item;

// Récupération du hwnd

if (FAILED(SendMessage(hwnd, LVM_GETITEMTEXT, 0, (LPARAM)&item))
{
// Echec
}
else
{
// Le texte de l'item est pointé par item.pszText
}

vendredi 31 août 2007 à 09:00:36 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

rt15

Membre Club Administrateur CodeS-SourceS
saut -> seau
vendredi 31 août 2007 à 19:14:38 | Re : Comment lister un syslisteview d'une application externe dans une list box ?

racpp

Administrateur CodeS-SourceS
Salut,
rt15 >> ramanovitch a précisé que la listview se trouve dans une autre application. Il s'agit donc d'un autre processus. Ta méthode ne fonctionnerait pas car le pointeur sur LVITEM ne sera pas valide dans le contexte mémoire de l'autre application. Il faudra donc obtenir le PID du processus cible avec GetWindowThreadProcessId(). Obtenir ensuite le HANDLE de ce processus avec OpenProcess(). On devra alors y  allouer de la mémoire qui contiendra LVITEM, avec son buffer pour le texte, en utilisant VirtualAllocEx(). Cest le pointeur retourné par cette fonction qui servira de dernier paramètre pour SendMessage(). On lira ensuite le contenu de la zone mémoire avec ReadProcessMemory(). Cette dernière copie les données dans un buffer local à notre application. Pour finir on libère la zone allouée avec VirtualFreeEx() et le HANDLE du processus avec CloseHandle().
dimanche 2 septembre 2007 à 00:00:00 | j'ai trouvé

ramanovitch

j'ai enfin trouvé la solution :

dans l'environnement builder c++ , on place le code suivant dans le on click du button1 afin de reccuperer les items de syslistview dont on a le handle "hwnd" et les metre dans ListBox1; le code est :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
listview = hwnd ; // on met le handle de syslitview dans listview

int count=(int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0);
int i;

LVITEM lvi, *_lvi;
char item[512], subitem[512];
char *_item /* , *_subitem */; /* pour subitem = 0 dans ce cas on va avoire les items de la 1ere colone */
unsigned long pid;
HANDLE process;

GetWindowThreadProcessId(listview, &pid);
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|
PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);

_lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM),
MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
PAGE_READWRITE);
/* _subitem=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
PAGE_READWRITE);  */

lvi.cchTextMax=512;

for(i=0; i<count; i++) {
lvi.iSubItem=0;
lvi.pszText=_item;
WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);

ReadProcessMemory(process, _item, item, 512, NULL);


ListBox1->Items->Add(item); //*********** ici j'ajoute les items dans ListBox1
}
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
}



Cette discussion est classée dans : application, code, lister, externe, syslisteview


Répondre à ce message

Sujets en rapport avec ce message

if, else... besoin de coup de main [ par bdkiller ] Bonjour à tous!Voilà j'ai ceci comme code:if (Edit1->Text == ini->ReadString("userdata","username","")) if (Edit2->Text == ini->ReadStr dll et lib [ par petitou ] Salut, j'ai un problème lors de l'édition de lien à la compilation avec ma dll dans visual studio.Lorsque je crée ma dll qui utilise une lib, ça ne p Code externe à l'exe [ par dulac02 ] Salut à tousJ'aimerais savoir si il est possible de créer, à la manière d'une dll, un fichier externe au programme qui serait capable d'utiliser assez Récuperation de parametre externe à l'application [ par patochons ] Je lance mon application c++ d'une invite ms-dos en envoyant un parametre (le nom de l'ordinateur) au lancement de l'application. Comment faire pour r Importer du code Java en C++ [ par cze ] Bonjour, je suis chargé de développé un module permettant d'envoyer et de recevoir des SMS et des MMS pour une grosse application qui est développée Copie de code source application flash [ par erwannoooo ] Bonjour,Pouvez vous m'indiquer s'il existe un moyen de copier le code source d'une application flash sur internet ?? en fait je recherche le moyen de application windows [ par scull ] Slt, voilà j'arrive à faire quelques petit programmes en c++et je voudrais savoir comment porter mon application suivante (toute bidon)#include <iostr Comment lister fichiers d'un repertoire? [ par Slown ] Bonjour, connaitriez vous un code source exemple, expliquant comment lister les fichiers d'un repetoire. j'avais deja trouvé un code, mais apres avoir [GTK+] lancer une application externe dans une fenêtre [ par lilivounet ] Bonjour,Mon projet : je voudrais un programme qui lise une video, et en même temps qui dessine au feutre par-dessus. Ce qui donnerait, par exemple, qu Coder en C++ une application VB6 [ par YOBAdmin ] Bonjour je cherche une personne pouvant retranscrire un code VB6 éxistant en C++, afin d'optimiser le code et également de corriger les bugs liés au V


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales