Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 708

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Подскажите в таком вопросе:

получил хэндлер окна, перебрал все хэндлеры дочерних окон, ни одно не дало мне текст (пробовал GetWindowText и SendMessage с пометкой WM_GETTEXT)

Помогите, пжлта! Заранее спасибо!
С уважением, Сергей!

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. function EnumChildProc(_handle: hwnd; LPARAM: dword):BOOL;stdcall;
  2. var
  3. Nm: array[0..255] of Char;
  4. Cs: array[0..255] of Char;
  5. h : THandle;
  6. ss : ansistring;
  7. l : integer;
  8. begin
  9. GetWindowText(_handle, Nm, 255); // ñ÷èòûâàåì òåêñò çàãîëîâêà îêíà
  10. GetClassName(_handle, Cs, 255); // ñ÷èòûâàåì íàçâàíèå êëàññà îêíà
  11. Form1.ListBox2.Items.Add(String(Nm)+' / '+String(Cs));
  12. SetLength( ss, 100 );
  13. ss:= '';
  14. h:= _handle;
  15. l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));
  16. Form1.ListBox2.Items.Add(ss);
  17. EnumChildWindows(_handle, @EnumChildProc, 0);
  18. EnumChildProc := True;
  19. end;


Бортник Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Бортник (статус: Посетитель)
Вопрос отправлен: 28 января 2010, 19:22
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 30 января 2010, 17:50; участников в обсуждении: 5.
min@y™

min@y™ (статус: Доктор наук), 28 января 2010, 19:41 [#1]:

Я пас. Коллеги, этому поцу западло поставить 5 за правильный ответ. Не советую связываться с ним.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Бортник

Бортник (статус: Посетитель), 28 января 2010, 19:43 [#2]:

Это уже не по-мужски! Тем более, что осознал свою ошибку!!!
min@y™

min@y™ (статус: Доктор наук), 28 января 2010, 19:53 [#3]:

Цитата (Бортник):

Это уже не по-мужски!

Прежде чем нажать на кнопку "3 балла", надо подумать мозгом: "а по-мужски ли это? Человек старался, искал для меня решение, а я ему - 3 балла - НА!".

Цитата (Бортник):

Тем более, что осознал свою ошибку!!!

Осознавание ошибки полезно только в том случае, когда её ещё можно исправить.

З.Ы. Андрюха, извини за философию, просто этот чорт мне всё настроение испортил.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Бортник

Бортник (статус: Посетитель), 28 января 2010, 19:56 [#4]:

Полезно осознавать ошибки всегда!!
Заметь, что я тебя ни разу не оскорбил!!!!!
"Поц", "Чорт" - следи за своими словами

Всё-таки, если кто-то поможет, буду более благодарен!
min@y™

min@y™ (статус: Доктор наук), 28 января 2010, 20:17 [#5]:

Цитата (Бортник):

Всё-таки, если кто-то поможет, буду более
благодарен!

0%. Я так и не понял, почему 3 балла. И не увидел никаких объяснений по этому поводу.

Цитата (Бортник):

следи за своими словами

Поучи меня ещё! Срача не будет!
Следи за своими оценками. Меняй ник, пароли, явки, телефоны, адреса. Никому здесь не надо хреновых оценок, один я тут лётчик-испытатель остался. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Жикльор

Жикльор (статус: 5-ый класс), 28 января 2010, 20:17 [#6]:

Цитата (min@y™):

“Цитата” (Бортник)
Это уже не по-мужски!

Прежде чем нажать на кнопку "3 балла", надо подумать мозгом: "а по-мужски ли это? Человек старался, искал для меня решение, а я ему - 3 балла - НА!".
“Цитата” (Бортник)
Тем более, что осознал свою ошибку!!!

Осознавание ошибки полезно только в том случае, когда её ещё можно исправить.

З.Ы. Андрюха, извини за философию, просто этот чорт мне всё настроение испортил.

Я согласен с min@y™, так как он очень проффесиональный программист и ошибки у него бывают редко. А то что какой-то посетитель не смог разобраться с ПРАВИЛЬНЫМ ответом и еще и поставить 3 за помощь, то такому болвану вряд ли кто поможет.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
min@y™

min@y™ (статус: Доктор наук), 28 января 2010, 20:29 [#7]:

Цитата (Жикльор):

Я согласен с min@y™

Хоть кто-то меня поддержал!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Бортник

Бортник (статус: Посетитель), 28 января 2010, 20:36 [#8]:

Чтобы ваши ошибки также принимали, как вы мою!!!
Жикльор

Жикльор (статус: 5-ый класс), 28 января 2010, 22:38 [#9]:

Без критики мы бы не развивались! Мы только что прокритиковали твою ошибку, а теперь делай выводы, как нужно общаться с теми, кто тебе может помочь.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
Бортник

Бортник (статус: Посетитель), 29 января 2010, 01:45 [#10]:

А вы и не помогли! То, что мне посоветовали - *****!!! Так что оценка всё-таки была правильной!
Жикльор

Жикльор (статус: 5-ый класс), 29 января 2010, 10:10 [#11]:

Оно помогло бы если умели бы пользоваться сказанными вам процедурами.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 22:16 [#12]:

не понял строчку:
  l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));

компилятор ругается на неё - типа, ошибка в операторе (missing operator or semicolon).
что ты хотел этой строкой сделать?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 22:46 [#13]:

ну, в исходниках-то ошибки можно было бы и исправить, а то выкладываешь, а оно даже не компилится :)
function EnumChildProc(_handle: hwnd; PARAM: dword):BOOL;stdcall;  // не LPARAM, а просто PARAM
var
  ...
  SetLength( ss, 100 );
//  ss:= '';  <-- убираем, а то забавно - в предыдущей строке увеличили переменную до 100 символов и тут же её очищаем
// access violation, однако вылазит :)
  ...
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 23:00 [#14]:

после небольшой корректировки, описанной выше, всё заработало. тексты окон выводятся и access violation больше не вылазит.
function EnumChildProc(_handle: hwnd; PARAM: dword):BOOL;stdcall;
var
  Nm: array[0..255] of Char;
  Cs: array[0..255] of Char;
  h : THandle;
  ss : ansistring;
  l : integer;
begin
  GetWindowText(_handle, Nm, 255); // считываем  текст заголовка окна
  GetClassName(_handle, Cs, 255); // считываем название класса окна
  Form1.ListBox2.Items.Add(String(Nm)+' / '+String(Cs)); 
  SetLength( ss, 100 );
  h:= _handle;
  l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));
  Form1.ListBox2.Items.Add('text=' + ss );
  EnumChildWindows(_handle, @EnumChildProc, 0);
  EnumChildProc := True;
end;
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Паровоз

Паровоз (статус: 10-ый класс), 30 января 2010, 15:27 [#15]:

Предлагаю еще строку
l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));
заменить на
l := SendMessage(h, WM_GETTEXT, 1000, Integer(ss));
Егор

Егор (статус: 10-ый класс), 30 января 2010, 15:35 [#16]:

а разница?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Паровоз

Паровоз (статус: 10-ый класс), 30 января 2010, 17:50 [#17]:

"а разница"

короче на 4 символа

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:23
Выполнено за 0.03 сек.