Comment trouver un élément dans le contrôle ListView?

Ma liste contient 3 colonnes Nom, adresse et numéro de téléphone.

Je veux récupérer un index pour un nom particulier.

J’utilise la macro ListView_FindItem pour trouver le numéro d’index, mais lorsque mon code arrive sur cette ligne, le programme se bloque.

Il dit simplement que la paie a cessé de fonctionner. Windows peut rechercher en ligne une solution au problème.

Je suis sûr que j’ai passé le bon handle à la macro ListView_FindItem mais je ne suis pas sûr de la structure LVFINDINFO .

Voici mon code

 WCHAR szProcess[80] = {0}; LVFINDINFO item = {LVFI_STRING, (LPCTSTR) szProcess}; //code to find parent handles ... //code to find index index = ListView_FindItem(hwndListView, -1, &item); 

Je ne suis pas sûr de l’indicateur LVFI_STRING et j’ai même essayé de passer une structure LVFINDINFO constante à la macro ListView_FindItem mais mon programme se bloque toujours.

Remarque: le code ci-dessus ne fait pas partie de l’application de paie. Je veux dire que l’application de paie a la listview et j’essaie de rechercher l’élément à partir d’une autre application.

Quelqu’un peut-il me diriger dans la bonne direction?

Merci.

Votre description LVM_FINDITEM un peu de clarté, mais je LVM_FINDITEM que vous envoyez le message LVM_FINDITEM (via la macro ListView_FindItem() ) à une fenêtre dans un processus différent.

Cela ne fonctionne tout simplement pas pour ce message Windows particulier, car il transmet un pointeur à une structure du processus appelant qui n’a pas de sens si elle est interprétée dans le contexte de l’autre processus (l’application de paie qui possède la vue liste).

Pour résoudre votre problème, vous pouvez allouer de la mémoire dans l’autre processus, bien que la tâche soit complexe. Un exemple couramment cité de cette technique se trouve dans l’article de Code Project, Stealing Program’s Memory .

Une approche plus simple consisterait peut-être à utiliser WM_COPYDATA, qui permettra de rassembler les données de chaîne entre les processus. Si cela ne vous donne pas assez de souplesse, vous devrez trouver un autre mécanisme IPC, par exemple des canaux nommés.