ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

WinApi и LVM_GETITEM. Интересная проблема
  #1  
Старый 25.05.2010, 20:30
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию WinApi и LVM_GETITEM. Интересная проблема

Значит так. Есть чужая форма (программа), в которой имеется компонент SysListView32, тоесть ListView. Необходимо через WinApi показать текст одного из элементов этого листбокса. Навякал код:

Код:
char pszText[20000];

LVITEM * lvi = new LVITEM();

lvi->mask = LVIF_TEXT;
lvi->iItem = 0;
lvi->iSubItem = 0;
lvi->pszText = pszText;
lvi->cchTextMax = 10000;


hWnd = FindWindow(NULL, "чужая прога"); //тут хэндл программы
hWnd = FindWindowEx(hWnd, NULL, "#32770", NULL);
hWnd = FindWindowEx(hWnd, NULL, "SysListView32", NULL); //а вот тут хэндл этого листбокса
i = (int) SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&lvi); //на этой строке чужая прога вылетает с "Память не может быть read"
Что только уже не пробовал. Но хэндл есть, т.к. некоторые другие сообщения, которые я передаю ему, работают корректно.

Вобщем, что за трабла, и как её решить? Подозреваю, что я что-то не так сделал в структуре LVITEM.

Пишу на C++, но WinApi
 
Ответить с цитированием

  #2  
Старый 25.05.2010, 20:44
fluffylion
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме:
188597

Репутация: 15
По умолчанию

дело не в структуре, при посылке сообщения
Код:
i = (int) SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&lvi);
&lvi указывает на структуру, находящуюся в адресном пространстве вашей программы; когда чужая программа получает данный указатель, то она будет обрабатывать его (считывать/записывать данные) относительно своего адресного пространства, а такого адреса, в зависимости от ситуации, в адресном пространстве чужой программы может и не быть, поэтому и выскакивает такая ошибка
 
Ответить с цитированием

  #3  
Старый 25.05.2010, 20:58
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Нет, программа обрабатывает его относительно МОЕЙ программы и передает данные именно туда.

Возьмем банальный WM_GETTEXT:

Код:
char mChar[1];
SendMessage(hWnd, WM_GETTEXT, 1 + 1, (LPARAM)&mChar);
Данный код возьмет 1 символ из текста handle, и запишет его в переменную МОЕЙ программы. Только что проверил, все работает.

Проблема остается открытой...
 
Ответить с цитированием

  #4  
Старый 25.05.2010, 23:41
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

А нахера ты передаешь адрес адреса?
Тамже русским языком написано

(LPARAM) (LPLVITEM) pitem
pitem - Pointer to an LVITEM structure that specifies the information to retrieve and receives information about the list-view item.

Так что передавай сразу указатель на структуру
 
Ответить с цитированием

  #5  
Старый 26.05.2010, 18:56
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Цитата:
Сообщение от slesh  
(LPARAM) (LPLVITEM) lvi
Аналогично - "Память не может быть read"

С той же ошибкой вылетает прога при след. коде:

Код:
ListView_GetItem(hWnd, lvi);
и

Код:
ListView_GetItem(hWnd, &lvi);

Последний раз редактировалось mailbrush; 26.05.2010 в 18:58..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с фотошопом. CapoB Болталка 9 31.03.2010 18:29
Проблема с микрофоном Rio-de-Janeiro Болталка 14 14.01.2010 20:55
Проблема с дедиками [help!] Sniper482 Безопасность 4 14.09.2009 21:22
Проблема с WINAPI. xa-xa89 С/С++, C#, Delphi, .NET, Asm 12 11.08.2009 02:42
Непонятная проблема с интернетом по всей локалке ZneP Администрирование 6 19.06.2009 15:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ