function enumproc(wnd:hwnd; lparam:lparam):BOOL; stdcall; var s,ss:array [1..30] of char; s1:string [30]; begin GetClassName(wnd,@s,20); GetWindowText(wnd,@ss,20); form3.Memo1.Lines.Add(ss); Result:=true; end;
procedure TForm3.Button1Click(Sender: TObject); var wnd,wnd1,wnd2:hwnd; s: array [1..30] of char; begin Memo1.Clear; EnumWindows(@enumproc,0) end;
Выводит очень большой список, а мне нужно только список тех окон, которые открыты. Мне надо найти окно по части имени, вот и решил перебрать все окна
LParam вроде тот же Integer. Но через него передается целый массив строк
Стоп, стоп, стоп. Во-первых, не массив строк, а TStrings, то есть дельфийский класс. То есть, указатель на него. Который имеет ту же длину, что и LPARAM. Так что никакой магии - только ловкость рук
Во вторых:
Цитата
А про массив и PChar даже не знал, как увидел такой пример, так и делал по-нему.
А к первоисточнику обратиться не пробовал? Вот описание функции MSDN -> GetClassName. Что видим?
Цитата
int WINAPI GetClassName( __in HWND hWnd, __out LPTSTR lpClassName, // <--- Вот то, что нужно !!! __in int nMaxCount );
LPTSTR видел? А что это такое, расскажешь мне? Напечатай в IDE Delphi и подведи мышь. Мне, например, показывается вот такое сообщение: "LPTSTR - System.PWideChar". Это в 2009-ой, в ранних версиях будет PChar. Опять магия?