информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach