private void SetFileNameToSelectedItem(IntPtr hListView, IntPtr hFNCombo, int selectedIndex) { if (selectedIndex >= 0) { var lvitem = new InteropUtil.LVITEM(); lvitem.mask = InteropUtil.LVIF_TEXT; var nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars * 2); for (int i = 0; i < InteropUtil.NumberOfFileChars; ++i) { Marshal.WriteInt16(nativeBuffer, i * 2, '\0'); } string name; try { Marshal.WriteInt16(nativeBuffer, 0); lvitem.pszText = nativeBuffer; lvitem.cchTextMax = InteropUtil.NumberOfFileChars; var length = hListView.SendListViewMessage(InteropUtil.LVM_GETITEMTEXT, (uint)selectedIndex, ref lvitem); name = Marshal.PtrToStringUni(lvitem.pszText, (int)length); } finally { Marshal.FreeCoTaskMem(nativeBuffer); } if (name != null && m_currentFolder != null) { try { var path = System.IO.Path.Combine(m_currentFolder, name); if (Directory.Exists(path)) { hFNCombo.SetWindowTextW(name); } } catch (Exception) { } } } }