Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2010, 13:41   #1
itsme
 
Регистрация: 28.12.2009
Сообщений: 4
По умолчанию Получения текста из ListBox дочернего окна / Delphi

Доброго времени суток!
Столкнулся с проблемой.
Есть чужое окно, в нем есть дочерний ListBox. Сначала получаю хендл родительского окна при помощи FindWindow, затем при помощи FindWindowEx нахожу дочернее. Вроде все хорошо по хендлу дочернего окна удается определить его класс, однако получить оттуда текст при помощи GetWindowText не выходит. Выводит пустую строку, хотя я наглядно вижу, что текст там имеется
Пожалуйста, подскажите в чем может быть проблема?
Дабы не быть голословным - кусок кода:
Код:
procedure TForm1.ListBox2Click(Sender: TObject);
var
Cs: Array[0..255] of Char;
Ts: Array[0..255] of Char;
NeWwnd:hwnd;
begin
NeWwnd:=StrToInt(ListBox2.Items.Strings[ListBox2.ItemIndex]);
GetClassName(NeWwnd,Cs,255);
Edit3.Text:=Cs;
GetWindowText(NeWwnd,Ts,255);
Edit4.Text:=Ts;
end;
И в Edit4 - пустота... Хотя в Edit3 выводится правильное имя класса.
И кстати - WinSpy показывает в поле Caption пустоту у этого элемента, хотя текст там действительно есть(

Последний раз редактировалось itsme; 13.01.2010 в 14:04.
itsme вне форума Ответить с цитированием
Старый 13.01.2010, 14:14   #2
itsme
 
Регистрация: 28.12.2009
Сообщений: 4
По умолчанию

Видимо все не так просто=\ Дописал следующую функцию:
Код:
function LB_GetSelectedItem(hListBox: THandle): string;
var
  Index, len: Integer;
  s: string;
  buffer: PChar;
begin
  Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0);
  len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0);
  GetMem(buffer, len + 1);
  SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer));
  SetString(s, buffer, len);
  FreeMem(buffer);
  Result := s;
end;
На моих ListBox'ах работает нормально и показывает действительно то, что мне нужно, а на требуемом - ни в какую(
itsme вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WM_KYEDOWN у дочернего окна. MSga Win Api 9 02.01.2010 18:09
API определение дочернего окна senia Win Api 6 25.12.2009 01:23
Изменение данных дочернего окна damned20 Win Api 1 11.08.2009 13:04
Выделение дочернего окна и пункта меню joker Win Api 7 04.02.2009 18:16
Разбиение дочернего окна на колонки... HunterMan Win Api 3 03.04.2008 23:19