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

C++Builder Discussion :

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


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut Comment lister un syslisteview d'une application externe dans une list box ?
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // ici        
    }
    et merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je ne suis pas sûr qu'il y ait du marshalling pour des messages comme LVM_GETITEMTEXT, donc il faudra sûrement plus compliqué... (VirtualAllocEx(), ReadProcessMemory() etc....)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut Bonjour
    au fait j'ai trouver le code ressemble a ceci :
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HWND  listview ;
     
    listview = ListView1->Handle ;
     
     
    int count=(int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0);
    int i;
     
    LVITEM lvi, *_lvi;
    char item[512], subitem[512];
    char *_item, *_subitem;
    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);
     
    ListBox1->Items->Add(lvi.pszText); //******* ici on ajout les items dans ListBox1
    }
    }
    mais j'ai un autre probleme si vous pouvez m'aider et il s'annonce comme ceci :
    comment peut on convertir une variable int en une variable handle ;
    ce que je veux moi c'est d'entrer le handle dans mon code a partir du control edit en tant que int et merci.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Entrer manuellement un HANDLE ?
    Ça ne sert à rien. C'est comme si tu demandais à l'utilisateur de taper un numéro de descripteur de fichier...

    Par contre, tu peux sûrement entrer manuellement un HWND si c'est bien le handle de fenêtre que tu veux.
    Le plus simple, c'est de le taper en hexa, appeler strtoul() dessus (ou strtoull()) si tu es en 64 bits) pour obtenir un nombre de la bonne taille, puis caster en HWND avec reinterpret_cast<>...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut salut
    a propos du handle je veux le faire entrer manuellemt pour faire des tests sur mon programme rien de plus;et merci pour votre réponse; mais j'ai un autre probléme si vous pouvez m'aider ladsus :
    pour le code que j'ai posté il fonctionne parfaitement pour une syslistview située dans la meme fiche de mon programme ;
    mais pour une syslistview d'une autre application cela ne semble pas fonctionner et un message d'erreur apparait;
    comment faire pour que sa fonctionne;
    et merci une fois de plus pour votre aide.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Salut,
    Dans le code que tu as posté, il manque le ReadProcessMemory() après le SendMessage().

    Et aussi, vérifie le résultat de tes allocations.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2010, 14h16
  2. lancer une application externe dans une fenêtre
    Par lilivounet dans le forum Windows
    Réponses: 0
    Dernier message: 29/07/2007, 16h03
  3. Réponses: 2
    Dernier message: 15/10/2006, 18h01
  4. Réponses: 3
    Dernier message: 08/07/2006, 19h59
  5. Réponses: 11
    Dernier message: 06/12/2005, 08h23

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