Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

EnumChildWindows [D5, D6, WinME, Win2k]


tred ©   (2003-02-12 21:03:00) 

привет всем.
ситуация такая
вылетает ошибка но не сразу
" прога вызвала ошибку ,прога будет закрыта,,,,
если будет повторятся перезагрузи комп "
но если вместо буфера ставлю listbox все окей,
кто подскажет всем спаситбо,

function EnumWindowsCallback(hwn:HWND):boolean;stdcall;
var texts:string; bus: array[0..1599] of Char;
begin
SetLength(texts, GetWindowTextLength(hwn));
lstrcat(bus,pchar(texts));
lstrcat(bus,#13#10);
result:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var ie:hwnd;
begin ie:= GetForegroundWindow;
EnumChildWindows(ie,@EnumWindowsCallback,0);
//savebus; проца сохранения в файл
end;end.


tred   (2003-02-14 21:19:00) [1]

>Игорь Шевченко
благодарю.


Игорь Шевченко   (2003-02-14 10:28:00) [2]

var
StringBuffer : String;

function EnumWindowsCallback(hwn:HWND;List:TListBox):boolean;stdcall;
var texts:string; txtLength : integer;
begin
SetLength(texts, GetWindowTextLength(hwn));
GetWindowText(hwn, PChar(Texts), Length(Texts));
StringBuffer := StringBuffer + Texts + #13#10;
result:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var ie:hwnd;
begin
ie:= GetForegroundWindow; StringBuffer := "";
EnumChildWindows(ie,@EnumWindowsCallback,integer(ListBox1));
end;end.


tred   (2003-02-13 17:54:00) [3]

я знаю что он рабочий. в таком случае, вы мне подскажите как listbox
на буфер заменить


Игорь Шевченко   (2003-02-13 17:10:00) [4]

Этот код будет работать.
Теперь найди 10 отличий :-)


tred   (2003-02-13 15:53:00) [5]

function EnumWindowsCallback(hwn:HWND;List:TListBox):boolean;stdcall;
var texts:string; txtLength : integer;
begin
SetLength(texts, GetWindowTextLength(hwn));
GetWindowText(hwn, PChar(Texts), Length(Texts));
List.Items.Add(Texts);
result:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var ie:hwnd;
begin
ie:= GetForegroundWindow; ListBox1.Items.Clear;
EnumChildWindows(ie,@EnumWindowsCallback,integer(ListBox1));
end;end.


Игорь Шевченко   (2003-02-13 15:06:00) [6]

Приведи код, который работает


tred   (2003-02-13 15:00:00) [7]

переменную bus я вынес,работает но не долго
ничего не меняется.
но самое главное с listbox все работает.


Игорь Шевченко   (2003-02-13 14:21:00) [8]

У тебя все переменные - локальные. По выходе из функции уничтожаются


tred   (2003-02-13 14:03:00) [9]

извиняюсь забыл про ету строку
GetWindowText(hwnd, PChar(Texts), Length(Texts));
получаем заголовки всех дочерних окон.


Игорь Шевченко   (2003-02-13 13:49:00) [10]

Но при всем при этом работать она не будет


Kair   (2003-02-13 13:32:00) [11]

Эта штука у меня нормально компилится.


Игорь Шевченко   (2003-02-13 13:19:00) [12]

Ты скажи, что хочешь получить-то ?


Игорь Шевченко   (2003-02-13 13:18:00) [13]

Угу. разобрался. Ты полный бред написал.


tred   (2003-02-13 12:20:00) [14]

нет не помогает ничего не изменилось.


Игорь Шевченко   (2003-02-13 11:13:00) [15]


> lstrcat(bus,pchar(texts));


Вот и ошибка. Надо lstrcopy


Наверх

Титульная страница Поиск, карта сайта Написать письмо