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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Ao�t 2007
    Messages
    61
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 61
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�
    Inscrit en
    Ao�t 2007
    Messages
    61
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 61
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�
    Inscrit en
    Ao�t 2007
    Messages
    61
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 61
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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