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

Windows Discussion :

hook d'une ListView


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut hook d'une ListView
    Bonjour!

    Je veux modifier les lignes d'une listview externe.
    Jusqu'à là j'ai pu récupérer le handle de la listview, supprimer des lignes ou des colones avec l'instruction sendmessage, mais pour la modification ça ne marche pas.
    un exemple de delete des items sendmessage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(hwnd,LVM_DELETEALLITEMS,0,NULL);

    Voici ce que je fais pour la modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LVITEM *LvItem=new LVITEM;
    memset(LvItem,0,sizeof(LVITEM));
    LvItem->cchTextMax=256;
    LvItem->mask=LVIF_TEXT;
    LvItem->iItem=4;           // choose item  
    LvItem->iSubItem=1;        // Put in first coluom
    LvItem->pszText=(LPTSTR)"Item 1";  // Text to display 
    SendMessage(hwnd,LVM_SETITEM,0,(LPARAM)LvItem); // Send to the Listview
    quelqu'un a une idée, c'est vraiment urgent.
    Merci d'avance.
    PS: La listview externe que je veux modifier c'est celle de la console mmc

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En quoi exactement "ça ne marche pas" ?

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    LvItem->pszText=(LPTSTR)"Item 1";  // Text to display
    Très mauvais. Si ça ne compile pas sans un cast, c'est que ce n'est pas le bon type de chaîne.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    LvItem->pszText=TEXT("Item 1");
    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
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    LvItem->pszText=(LPTSTR)"Item 1";  // Text to display
    Très mauvais. Si ça ne compile pas sans un cast, c'est que ce n'est pas le bon type de chaîne.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    LvItem->pszText=TEXT("Item 1");
    Avant c'était comme tu la mentionné, mais juste avant que je colle le code, j'ai voulu tester avec le cast.

    Citation Envoyé par Médinoc
    En quoi exactement "ça ne marche pas" ?
    Rien n'est modifié dans la listview

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah oui, ce que je n'avais pas vu, c'est que tu essaies de modifier une ListView se trouvant dans un autre processus.
    Je ne serais pas étonné qu'en fait, le bug ne soit pas "ça marche pas dans certains cas" mais "ça marche dans d'autres" : En effet, je ne pense pas qu'une ListView soit censée être modifiable depuis un autre processus...

    Sans compter que là, tu essaies de transmettre un pointeur d'un processus à l'autre. Je sais que certains messages sont marshallés, mais j'ignore si ceux d'une ListView le sont...


    Tu peux toujours voir si tu as plus de chance en allouant et écrivant le LVITEM dans le processus de destination (VirtualAllocEx() + WriteProcessMemory()) ...

    PS: GetLastError() dit quelque chose d'intéressant ?
    Tu peux aussi voir avec SendMessageTimeout(), qui a sur SendMessage() l'avantage d'avoir deux valeurs de retour: Une pour le LRESULT du message et une pour savoir si SendMessageTimeout() a réussi ou échoué...


    Edit: Ah, c'est dans un hook... Ce n'est donc pas d'un process à l'autre?
    Ou bien si, ça l'est quand même ?

    Edit final: Le test indique que c'est bel et bien d'un processus à l'autre, et que les messages utilisés ne sont pas marshallés.
    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
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Ah oui, ce que je n'avais pas vu, c'est que tu essaies de modifier une ListView se trouvant dans un autre processus.
    Non ce n'est pas l'envoi d'un pointeur d'un process à l'autre, l'envoie de message c'est totalement différent. Ce pendant j'ai pu ajouter des items mais on retrouve plus le menu (click droit sur l'item), la seule solution que je vois c'est la modifications.

    En faite ce que je veux atteindre c'est personnaliser la console de "Active directory users and computers", lors de l'affichage des utilisateurs, si c'est un user mal j'affiche une îcones sinon une autre (cette information est continue dans un attribut que j'ai ajouté au schema de Active directory gender),
    avec icon path c'est statique et ne dépend pas de l'attribut
    J'ai essayé les extension shell, mais il y a aucune information sur ce sujet, alors j'ai eu l'idée de la méthode hook ( qu'avec j'ai pu supprimé, obtenir les items, mais la modification non)
    Sans compter que là, tu essaies de transmettre un pointeur d'un processus à l'autre. Je sais que certains messages sont marshallés, mais j'ignore si ceux d'une ListView le sont...

    Citation Envoyé par Médinoc
    Tu peux toujours voir si tu as plus de chance en allouant et écrivant le LVITEM dans le processus de destination (VirtualAllocEx() + WriteProcessMemory()) ...
    J'ai testé avec, avant de commencer avec le hook mais ça me renvoie le code 0 donc pas d'erreur et 52 lpNumberOfBytesWritten, mais rien ne change

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Tu peux toujours voir si tu as plus de chance en allouant et écrivant le LVITEM dans le processus de destination (VirtualAllocEx() + WriteProcessMemory()) ...

    voilà ce que j'ai fait avec (VirtualAllocEx() + WriteProcessMemory())
    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
    LVITEM *LvItem=new LVITEM;
    memset(LvItem,0,sizeof(LVITEM));
    	LvItem->cchTextMax=256;
    	LvItem->mask=LVIF_TEXT;
    
    LvItem->iItem=0;           // choose item  
    LvItem->iSubItem=0;        // Put in first coluom
    LvItem->pszText=(LPTSTR)"Item 1";  // Text to display 
    
    LPVOID lpData, lplvItem;
    		HANDLE hProcess;
    		DWORD dwProcessId = 0;
    		GetWindowThreadProcessId(hwnd, &dwProcessId);
    	hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
    		if(!hProcess)
    MessageBox(NULL,TEXT("Process not open"),TEXT(""),MB_OK);
    		lpData = VirtualAllocEx(hProcess, 0, sizeof(LVITEM) + sizeof(POINT) + sizeof(RECT) + 256, MEM_COMMIT, PAGE_READWRITE);
    	if (!lpData)
    		_tprintf(_T("Erreur  VirtualAllocEx"));
    		lplvItem	= (LPBYTE)lpData + sizeof(POINT);
    		WriteProcessMemory(hProcess, lplvItem, LvItem, sizeof(LVITEM), &dwret);
    		_tprintf(_T("%d"),dwret);

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour le composant COM, c'est bête, j'avais vu un truc sur les IExtractIcon avec les users, mais maintenant que je le cherche, je ne le trouve plus...
    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.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Pour le composant COM, c'est bête, j'avais vu un truc sur les IExtractIcon avec les users, mais maintenant que je le cherche, je ne le trouve plus...
    C'est moi qui la posté c'est celui là?
    http://www.developpez.net/forums/sho...d.php?t=215588

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh, oui, c'est celui-là

    Pour ton code sur WriteProcesMemory, je pense qu'il est incomplet.

    Code C++ : 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
    //LVITEM local
    LVITEM LvItem = {0};
    LvItem.cchTextMax=256;
    LvItem.mask=LVIF_TEXT;
    LvItem.iItem=0;           // choose item  
    LvItem.iSubItem=0;        // Put in first coluom
    LvItem.pszText=NULL;
     
    LPCTSTR sczText = TEXT("Item 1");  // Text to display 
     
    //Pointeurs distants
    LPVOID pFarLvItem = NULL;
    LPVOID pFarText = NULL;
     
    //Ouverture processus
    HANDLE hProcess = NULL;
    DWORD dwProcessId = 0;
    GetWindowThreadProcessId(hwnd, &dwProcessId);
    hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
    if(hProcess==NULL)
    	MessageBox(NULL,TEXT("Process not open"),TEXT(""),MB_OK);
     
    //Allocation
    pFarLvItem = VirtualAllocEx(hProcess, 0, sizeof(LVITEM)+256, MEM_COMMIT, PAGE_READWRITE);
    if(pFarLvItem == NULL)
    	_tprintf(_T("Erreur  VirtualAllocEx\n"));
    pFarText = ((LPLVITEM)pFarLvItem) + 1;
     
    //Initialisation des pointeurs
    LvItem.pszText = (LPCTSTR)pFarText;
    //Ecriture
    WriteProcessMemory(hProcess, pFarLvItem, &LvItem, sizeof(LVITEM), &dwret);
    _tprintf(_T("%d"),dwret);
    WriteProcessMemory(hProcess, pFarText, sczText, _tcslen(sczText)*sizeof(TCHAR)+1, &dwret);
    _tprintf(_T("%d"),dwret);
    Edit:
    • Corrigé pFarText = ((LPLVITEM)pFarLvItem) + 1;
    • Corrigé WriteProcessMemory(hProcess, pFarText, sczText, _tcslen(sczText)*sizeof(TCHAR)+1, &dwret);
    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.

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Euh, oui, c'est celui-là

    Pour ton code sur WriteProcesMemory, je pense qu'il est incomplet.

    Code C++ : 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
    //LVITEM local
    LVITEM LvItem = {0};
    LvItem.cchTextMax=256;
    LvItem.mask=LVIF_TEXT;
    LvItem.iItem=0;           // choose item  
    LvItem.iSubItem=0;        // Put in first coluom
    LvItem.pszText=NULL;
     
    LPCTSTR sczText = TEXT("Item 1");  // Text to display 
     
    //Pointeurs distants
    LPVOID pFarLvItem = NULL;
    LPVOID pFarText = NULL;
     
    //Ouverture processus
    HANDLE hProcess = NULL;
    DWORD dwProcessId = 0;
    GetWindowThreadProcessId(hwnd, &dwProcessId);
    hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
    if(hProcess==NULL)
    	MessageBox(NULL,TEXT("Process not open"),TEXT(""),MB_OK);
     
    //Allocation
    pFarLvItem = VirtualAllocEx(hProcess, 0, sizeof(LVITEM)+256, MEM_COMMIT, PAGE_READWRITE);
    if(pFarLvItem == NULL)
    	_tprintf(_T("Erreur  VirtualAllocEx\n"));
    pFarText = ((LPLVITEM)lpData) + 1;
     
    //Initialisation des pointeurs
    LvItem.pszText = (LPCTSTR)pFarText;
    //Ecriture
    WriteProcessMemory(hProcess, pFarLvItem, &LvItem, sizeof(LVITEM), &dwret);
    _tprintf(_T("%d"),dwret);
    WriteProcessMemory(hProcess, pFarText, sczText, _tcslen(sczText)*sizeof(TCHAR), &dwret);
    _tprintf(_T("%d"),dwret);
    merci mais juste il y a une erreur, dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pFarText = ((LPLVITEM)lpData) + 1;//lpData c'est pFarLvItem  n'est ce pas
    Merci pour le code, pas d'erreur aussi, d'abord il a crit 52 bit puis 12, mais ça ne marche pas

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Merci, je corrige (et j'avais fait une autre erreur).
    Donc, si tu fais le SendMessage() avec pFarLvItem, ça ne marche toujours pas...

    Au fait, je voudrais vérifier une chose, pour être sûr que je ne fais pas fausse route:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DWORD dwProcessId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
    //Debug
    {
    	DWORD dwThisProcessId = GetCurrentProcessId();
    	DWORD dwThisThreadId = GetCurrentThreadId();
    	_tprintf(TEXT("MMC process: %lu - This process: %lu\n"), dwProcessId, dwThisProcessId);
    	_tprintf(TEXT("MMC UI thread: %lu - This thread: %lu\n"), dwThreadId, dwThisThreadId);
    }
    Ça m'intéresse de savoir si c'est le même process (auquel cas, le coup du VirtualAllocEx()/WriteProcessMemory() ne servait à rien et le problème vient d'autre chose) ou un autre, et je suis intéressé pour les threads aussi (je ne suis pas expert des hooks)
    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.

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Ça m'intéresse de savoir si c'est le même process (auquel cas, le coup du VirtualAllocEx()/WriteProcessMemory() ne servait à rien et le problème vient d'autre chose) ou un autre, et je suis intéressé pour les threads aussi (je ne suis pas expert des hooks)
    Voilà le résultat:
    MMC process: 4056 - This process: 3444
    MMC UI thread: 3244 - This thread: 1660

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Médinoc
    Merci, je corrige (et j'avais fait une autre erreur).
    Donc, si tu fais le SendMessage() avec pFarLvItem, ça ne marche toujours pas...
    Vraiment un grand merci, jamais je ne serais pas te remplacer ce que tu ma fait.
    En faite il fallait faire le write process memory puis utiliser le sendmessage avec pFarLvItem, ça marche pour l'ajout et modification, vraiment j'oublirais jamais ton aide.
    Merci à tous les gens qui pensent à aider.

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En faite il fallait faire le write process memory puis utiliser le sendmessage avec pFarLvItem
    Ah oui, j'avais oublié de préciser

    Vraiment un grand merci, jamais je ne serais pas te remplacer ce que tu ma fait.
    vraiment j'oublirais jamais ton aide.
    Merci à tous les gens qui pensent à aider.
    De rien...
    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.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    PS: N'oublie pas de libérer la mémoire avec VirtualFreeEx() une fois que tu n'en as plus besoin...
    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. [C#] [WinForms] Redimensionnement automatique d'une ListView
    Par Phenomenium dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/02/2005, 11h43
  2. Changer dynamiquement la couleur d'un item d'une listview
    Par little_cypress dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2004, 14h46
  3. [VB.NET] Objet .Tag dans une ListView
    Par Lois dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/10/2004, 16h35
  4. [C#] Surlignage d'un élement d'une ListView
    Par tontonplaisir dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/09/2004, 15h35
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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