Получить текст элемента ListView из другого окна - PullRequest
4 голосов
/ 29 сентября 2011

Я хочу сделать небольшое приложение, которое изменяет устройство воспроизведения по умолчанию в 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 Ответ

1 голос
/ 30 сентября 2011

Вы пытались использовать вместо этого LWM_GETITEMTEXTW?

...