![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить список заголовков всех окон [D5]
Igit © (2003-01-15 10:54:00)Я это пытался сделать так:
.......................
var str:pchar;........................
function EnumWindowsProc(h: hwnd): BOOL; stdcall;............................
begin
GetWindowText(h, str,80);
end;
procedure TForm1.Button15Click(Sender: PObj);......end..................
var s:string;
begin
while EnumWindows(@EnumWindowsProc,0)=true do
begin
s:=str;
listbox4.Add(s);
end;
end;
Почему-то у меня этот цикл выполняется бесконечно, занося в listbox4 одинакоыую строку "Programan Manager" (или что-то вроде...) Где я ошибся?
Igit (2003-01-15 11:34:00) [1]Извиняюсь ;) По ходу я просто не так понял назначение функции EnumWindowsProc
Igit (2003-01-15 11:30:00) [2]ZrenBy © (15.01.03 11:05)
Тоже самое... EnumeWindows передает функции все время одно окно...
F1 © (15.01.03 10:58)
Я переделал, так:
var window:hwnd;
function EnumWindowsProc(h: hwnd): BOOL; stdcall;
begin
window:=h;
end;
procedure TForm1.Button15Click(Sender: PObj);
var s:string;
str:pchar;
begin
EnumWindows(@EnumWindowsProc,0);
window:=GetNextWindow(window, gw_HWndNext);
window:=GetNextWindow(window, gw_HWndPrev);
while window<>0 do
begin
window:=GetNextWindow(window, gw_HWndNext);
GetWindowText(window, str,80);
s:=str;
listbox4.Add(s);
end;
end;
но после вызова GetNextWindow window становится равен 0
Игорь Шевченко (2003-01-15 11:29:00) [3]В кладовке, в разделе "Готовые программы" лежит программа EnumFunctions - там есть пример использования этой функции.
ZrenBy (2003-01-15 11:05:00) [4]Просто EnumWindows(@U_ECWProc,LPARAM(StringList));
без while
и
function U_ECWProc(hW:HWND;lP:LPARAM):Boolean;stdcall;
var S:String;
begin
SetLength(S,SendMessage(hW,WM_GETTEXTLENGTH,0,0)+1);
SetLength(S,SendMessage(hW,WM_GETTEXT,Length(S),LPARAM(S)));
TStringList(lP).Add(S);
Result := True;
end;
F1 (2003-01-15 10:58:00) [5]Делай GetNextWindow!