This code might be useful for nonVCL applications or to read Listbox
items from another application.

// Retrieve the number of items in a ListBox


function LB_GetItemCount(hListBox: THandle): Integer;
begin
  Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0);
end;

// Delete a string in a ListBox


procedure LB_DeleteItem(hListBox: THandle; Index: Integer);
begin
  SendMessage(hListBox, LB_DELETESTRING, Index, 0);
end;

// Retrieve the selected item from a ListBox


function LB_GetSelectedItem(hListBox: THandle): string;
var
  Index, len: Integer;
  s: string;
  buffer: PChar;
begin
  Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0);
  len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0);
  GetMem(buffer, len + 1);
  SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer));
  SetString(s, buffer, len);
  FreeMem(buffer);
  Result := IntToStr(Index) + ' : ' + s;
end;

1.Usage Example:

procedure TForm1.Button1Click(Sender: TObject);
var
  hListBox: THandle;
begin
  hListBox := {...}; // listbox handle
  ListBox1.Items.Text := LB_GetSelectedItem(hListBox);
end;

// Retrieve a string from a ListBox

function LB_GetListBoxItem(hWnd: Hwnd; LbItem: Integer): string;
var
  l: Integer;
  buffer: PChar;
begin
  l := SendMessage(hWnd, LB_GETTEXTLEN, LbItem, 0);
  GetMem(buffer, l + 1);
  SendMessage(hWnd, LB_GETTEXT, LbItem, Integer(buffer));
  Result := StrPas(buffer);
  FreeMem(buffer);
end;

2.Usage Example:

procedure TForm1.Button2Click(Sender: TObject);
var
  hListBox: THandle;
begin
  hListBox := {...}; // listbox handle
  ListBox1.Items.Text := LB_GetListBoxItem(hListBox, 2);
end;


// Retrieve all listbox items

function LB_GetAllItems(hWnd: Hwnd; sl: TStrings): string;
var
  RetBuffer: string;
  i, x, y: Integer;
begin
  x := SendMessage(hWnd, LB_GETCOUNT, 0, 0);
  for i := 0 to x - 1 do
  begin
    y := SendMessage(hWnd, LB_GETTEXTLEN, i, 0);
    SetLength(RetBuffer, y);
    SendMessage(hWnd, LB_GETTEXT, i, lParam(PChar(RetBuffer)));
    sl.Add(RetBuffer);
  end;
end;

3.Usage example:

procedure TForm1.Button3Click(Sender: TObject);
var
  sl: TStringList;
  ListBox_Handle: THandle;
begin
  hListBox := {...}; // listbox handle
  sl := TStringList.Create;
  try
    LB_GetAllItems(ListBox_Handle, sl);
  finally
    ListBox1.Items.Text := sl.Text;
    sl.Free;
  end;
end;