|
Вопрос # 3 708/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Подскажите в таком вопросе:
получил хэндлер окна, перебрал все хэндлеры дочерних окон, ни одно не дало мне текст (пробовал GetWindowText и SendMessage с пометкой WM_GETTEXT)
Помогите, пжлта! Заранее спасибо!
С уважением, Сергей!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- function EnumChildProc(_handle: hwnd; LPARAM: 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 );
- ss:= '';
- h:= _handle;
- l := SendMessage(h, WM_GETTEXT, 1000, lparam(@ss[1]));
- Form1.ListBox2.Items.Add(ss);
- EnumChildWindows(_handle, @EnumChildProc, 0);
- EnumChildProc := True;
- end;
 |
Вопрос задал: Бортник (статус: Посетитель)
Вопрос отправлен: 28 января 2010, 19:22
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 17; последнее сообщение — 30 января 2010, 17:50; участников в обсуждении: 5.
|
min@y™ (статус: Доктор наук), 28 января 2010, 19:41 [#1]:
Я пас. Коллеги, этому поцу западло поставить 5 за правильный ответ. Не советую связываться с ним.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Бортник (статус: Посетитель), 28 января 2010, 19:43 [#2]:
Это уже не по-мужски! Тем более, что осознал свою ошибку!!!
|
|
min@y™ (статус: Доктор наук), 28 января 2010, 19:53 [#3]:
Цитата (Бортник):
Это уже не по-мужски!
Прежде чем нажать на кнопку "3 балла", надо подумать мозгом: "а по-мужски ли это? Человек старался, искал для меня решение, а я ему - 3 балла - НА!".
Цитата (Бортник):
Тем более, что осознал свою ошибку!!!
Осознавание ошибки полезно только в том случае, когда её ещё можно исправить.
З.Ы. Андрюха, извини за философию, просто этот чорт мне всё настроение испортил.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Бортник (статус: Посетитель), 28 января 2010, 19:56 [#4]:
Полезно осознавать ошибки всегда!!
Заметь, что я тебя ни разу не оскорбил!!!!!
"Поц", "Чорт" - следи за своими словами
Всё-таки, если кто-то поможет, буду более благодарен!
|
|
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™ (статус: Доктор наук), 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 символа
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|