Макрос ListView_GetItem () & LV_GETITEMTEXT возвращает пустую STRING при получении других элементов списка просмотра APP - PullRequest
0 голосов
/ 01 февраля 2011

Я полностью осознаю, что если я пытаюсь получить буфер из других элементов списка приложений, которые мне нужны для решения границы пространства памяти, то, что я делаю, это перехват, который возвращает хорошо, без ошибок, успех затем

enter code here
LVITEM lvi;
lvi.cchTextMax = 552;
lvi.mask = LVIF_TEXT;

_tfreopen(path,_T("w"),stdout);

for (int nItem = 0; nItem < nMaxItems; nItem++) {

    // Get the name and position of a ListView item.
    lvi.iSubItem = 0;
    lvi.iItem = nItem;
    lvi.pszText = szName;

    ListView_GetItem(hWndLV, &lvi);
    wprintf(L"%s, ", szName);
    wprintf(L"%s, ", lvi.pszText);
    for ( int subitem = 0; subitem < columns; subitem++)
    {

        lvi.iSubItem = subitem;
        lvi.iItem = nItem;
        lvi.pszText = szName;

        ListView_GetItem(hWndLV, &lvi);

        wprintf(L"%s, ", szName);
        wprintf(L"%s, ", lvi.pszText);

    }  
    wprintf(L"%s", "\n");

}

wprintf(L"%s", GetLastError());
fclose (stdout);

Нет ошибки с getlasterror, и это прекрасно работает на любом другом просмотре списка, который я пробовал раньше, кроме этого приложения, возможно ли как-то получить текст элемента?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Может быть, это нарисованный владельцем просмотр списка (LVS_OWNERDRAWFIXED)?В этом случае будет невозможно получить текст без личного знания приложения, которому оно принадлежит.

0 голосов
/ 01 февраля 2011

Вам не нужно использовать перехват, чтобы пересечь границу процесса. Вы можете использовать WriteProcessMemory / ReadProcessMemory, как описано в следующей статье Project Code: http://www.codeproject.com/KB/threads/int64_memsteal.aspx

То, на что вам следует обратить внимание, это пересечь 32/64 битную границу. Теперь я знаю, как этого добиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...