Получить текст элемента ListView из другого окна
Я хочу сделать небольшое приложение, которое изменяет устройство воспроизведения по умолчанию в Windows 7. Единственным решением было взаимодействие со звуковым апплетом. Мне удалось получить дескриптор окна SysListView32, в котором есть имя устройства, но я не могу получить текст из ListView.
Это код, используемый:
IntPtr sListView = (window handle received from another function)
LVITEM lvi = new LVITEM();
lvi.mask = LVIF_TEXT;
lvi.cchTextMax = 1024;
lvi.iItem = 0; // i tried with a loop trought all the items
lvi.iSubItem = 0;
lvi.pszText = Marshal.AllocHGlobal(1024);
IntPtr ptrLvi = Marshal.AllocHGlobal(Marshal.SizeOf(lvi));
Marshal.StructureToPtr(lvi, ptrLvi, false);
SendMessage(sListView, (int)WinMesages.LVM_GETITEMW, IntPtr.Zero, ptrLvi);
string strLvi = Marshal.PtrToStringAuto(lvi.pszText);
Результатом (strLvi) являются некоторые китайские буквы. Что не так в сценарии?
ОБНОВЛЕНИЕ: структура LVITEM это:
private struct LVITEM
{
public uint mask;
public int iItem;
public int iSubItem;
public uint state;
public uint stateMask;
public IntPtr pszText;
public int cchTextMax;
public int iImage;
public IntPtr lParam;
}
Дескриптор sLIstView правильный... проверено в spy++. Какой тест мне нужно выполнить, чтобы проверить, где проблема? Я мог бы дать вам весь сценарий, если это поможет.
1 ответ
Решение