¿Y te funciona empleando una variable string de forma intermedia? Es decir almacenando en una variable string el contenido del ListBox y luego pasando dicha variable en ShellExecute.
Tal vez digo una tontera pero... es posible que se deba a que la propiedad Items es de tipo TStrings y la función PChar() no interpreta apropiadamente este tipo.
¿Porqué no pruebas con emplear esto?
Código Delphi
[-]PChar(ListBox1.Items.Strings[ListBox1.ItemIndex])
Saludos,