Пытаюсь сохранить содержимое ListView в виде html-отчета. Вся беда в том, что ListView принадлежит другому процессу. Когда я посылаю сообщение LVM_GETITEMTEXT, в lParam номер итема, а в wParam указатель на структуру, в которой есть поле содержащее адрес строки, куда нужно писать текст. Только эта строка, получается, находится в адресном простанстве другого процесса, в подопытной программе возникает исключение и она вылетает. Пробовал выделять память в том процессе через VirtualAllocEx, но все равно вылетает с ошибкой Есть ли какие-то методы, кроме инжекта кода в процесс, позволяющие осуществить задуманное?
Хотя че-то я сглупил. Ведь сообщения используютя для передачи данных между процессами. Тогда вопрос мемного меняется: как нужно правильно получать элементы ListView (через LVM_GETITEMTEXT или LVM_GETITEM, мне все равно), хотя все-таки непонятно, почему подопытные проги вылетают.
какие параметры ты заполняешь в структуре LVITEM? если я не ошибаюсь должно быть что-то вроде: //----------------------------- LVITEM lv; char szText[1024]; ZeroMemory(&lv,sizoeof(LVITEM)); lv.mask = LVIF_TEXT; lv.pszText = szText; lv.cchMaxText = 1024; lv.iItem = 0; lv.iSubItem = 0; SendMessage(hList,LVM_GETITEMTEXT,0,(LPARAM)&lv); //------------------------------- Если не пробовал,то попробуй макрос ListView_GetItemText
Прям диалого сам собой получается (даже не знаю какой смайлик поставить). Короче до всего сам дошел, сделал, если кому-то надо - пользуйтесь. Пока еще на стадии разработки, поэтому о законченности программы и ее оптимизированности нету и мысли.
Была уже такая тема. И рабочий пример я в ней выкладывал. 2 electron: Фокус не пройдёт, т.к. окно в другом процессе. См. обьяснение выше.
Есть такой код: http://ru.livecode.org/index.php/Как_получить_handle_для_элементов_ListView_чужого_процесса