Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проблема с EnumWindows


Автор: Тутанхамец 9.12.2006, 10:58
Здравствуйте. Хочу получить список верхнеуровневых окон. Вот моя EnumWindowsProc:

Код

function mwp(wnd:HWND ):boolean;
var
s:string;
n:integer;
begin
setlength(s,255);
n:=getwindowtext(wnd,pchar(s),255);
setlength(s,n);
{if n=0 then begin
    n:=getlasterror;
    if n<>0 then showmessage(inttostr(n));
end;}
form1.ListBox1.Items.Add(inttostr(wnd)+'  '+s);
mwp:=true;
end;


Какие-то числа в wnd передаются. Но когда пытаюсь взять текст этого окна, возникает ошибка 1400, то есть неверный хэндл. Что не так? Заранее благодарен. 


Автор: bems 9.12.2006, 12:44
Код

function mwp(wnd:HWND ):BOOL;stdcall;

Автор: Тутанхамец 9.12.2006, 13:29
Вона как... Благодарствую! smile

А сам я до этого мог дойти? В хэлпе  вроде ни слова. Или есть какое-то общее правило? 

И еще. Сишное CALLBACK на Делфи как-то переводится? Или на него можно забивать?

Добавлено @ 13:42 
И еще... smile

Какой вариант лучше - первый или вот этот:
Код

procedure TForm1.Button3Click(Sender: TObject);
var
oh,h:HWND;
s:string;
begin
h:=self.Handle;
repeat
setlength(s,256);
getwindowtext(h,pchar(s[1]), 255);
listbox1.Items.Add(inttostr(h)+'  '+s);
oh:=h;
h:=GetWindow(h,GW_HWNDNEXT);
until oh=h;
end;

end.


Автор: Snowy 9.12.2006, 14:10
Код

setlength(s,256);
getwindowtext(wnd, pchar(s), 255);
listbox1.Items.Add(inttostr(h) + '  ' + PChar(s));

Автор: Тутанхамец 9.12.2006, 15:35
Спасибо. Учту. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)