информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаSpanning Tree Protocol: недокументированное применениеВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Проблемы с окнами.... 03.07.03 15:40  
Автор: Darkhelmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Господа программеры, не могу понять в чем у меня баг подсобите....

вот код:
procedure get_child(h:wnd);stdcall;
begin
getwindowtext(h,тут буфер, тут размер);
listbox1.items.add(' This Child -> '+буфер);
result:=true;
end;

procedure get_w(h:wnd);stdcall;
begin
getwindowtext(h,тут буфер, тут размер);
enumchildwindow(h,@get_child,0);
listbox1.items.add(буфер);
result:=true;
end;

procedure get_all_window;
begin
enumwindows(@get_w,0);
end;


Короче вроде работает но, после первого перечисления дочерних окон вываливает (без ошибка), просто завершает перебор окон...

Вопрос может баг в исходнике, или кто знает как все окна перечислить, и родительские и дочернии...
[Win32] А может вместо процедур функции попробовать, иначе как ты результаты возвращаешь 03.07.03 17:09  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
Да ладно тебе Кирилл из Леспроекта прикалываться... У меня функции... 04.07.03 08:57  
Автор: Darkhelmet Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Скажи лучше почему при перечислении дочерних окон после первого перебора, больше не заходит в эту функцию...
Да ладно тебе, Тёмный Шлем из хрен знает откуда, никто над тобой не прикалывается ;-) 04.07.03 10:30  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 04.07.03 10:36  Количество правок: 1
<"чистая" ссылка>
В MSDN смотрим:

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);

BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);

Тут же явно видно, что колбяка суть функция, которая возвращает булевое выражение... А ежели у тебя колбяка Procedure, то сорвёшь себе стек.
Вот правильная декларация колбяки на Delphi:
Function EnumWindowsProc(aWnd: HWND; aLParam: LPARAM): BOOL; StdCall;
Begin
//Не забудь вернуть TRUE, если хочецца продолжать перебор ;-)
Result := True;
End;

А у тебя — что это за процедура с одним параметром?
procedure get_w(h:wnd);stdcall;
begin
getwindowtext(h,тут буфер, тут размер);
enumchildwindow(h,@get_child,0);
listbox1.items.add(буфер);
result:=true;
end;

procedure get_all_window;
begin
enumwindows(@get_w,0); //Вот тут у тебя косяк — толкаешь адрес неправильной колбяки!
end;
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach