No se puede usar LVM_GETITEMTEXT sin que la aplicación de destino se bloquee en C ++

Estoy tratando de capturar datos de una clase SysListView32 (según Spy ++) de otra aplicación. El envío de un mensaje LVM_GETITEMCOUNT a este identificador siempre devuelve el número correcto de elementos. Hay una ventana secundaria que es SysHeader32 que presumiblemente contiene títulos de encabezado.

Cuando intento enviar un mensaje LVM_GETITEMTEXT a la aplicación de destino, se bloquea. El código relevante para este mensaje está abajo:

LPTSTR lpText;
LVITEM* lvItem;
lvItem = new LVITEM;
lvItem->iSubItem = 0;
lvItem->cchTextMax = 255;
lvItem->pszText = lpText;
//SysListViewHandle is the HWND to the SysListView32 'content' window
SendMessage(SysListViewHandle, LVM_GETITEMTEXT, 1, (long)lvItem);

Cada 'celda' en la lista contiene texto de no más de 50 caracteres, por lo que el tamaño máximo de texto debería estar bien.

La estructura de la lista de la que deseo obtener los datos tiene 16 columnas y un número variable de entradas, más de 5, por lo que el wParam debería estar bien. Los estilos que utiliza esta lista son WS_CHILDWINDOW, WS_VISIBLE, WS_TABSTOP, WS_HSCROLL, LVS_REPORT con estilos extendidos de WS_EX_LEFT, WS_EX_LTRREADING, WS_EX_RIGHTSCROLLBAR, WS_EX_NOPARENTNOTIFY, WS_EX_CLIENTEDS.

UISpy puede sondear esta lista y encontrar los datos reales, así que supuse que sería un paseo por el parque para usar mensajes, pero esto ha demostrado que no es el caso = / cualquier ayuda sería muy apreciada.

EDITAR: Vale la pena mencionar que el registro de errores al fallar es: excepción no controlada en 0x77582b87 en applicationname.exe: 0xC0000005: ubicación de escritura de infracción de acceso 0x01bc48b0. Ubicación de la pila de llamadas Desmontaje de comctl32.dll: 77582B87 mov dword ptr [esi], 1

Respuestas a la pregunta(1)

Su respuesta a la pregunta