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;
Выводит очень большой список, а мне нужно только список тех окон, которые открыты. Мне надо найти окно по части имени, вот и решил перебрать все окна
а зачем столько "типов" LPSTR, LPCSTR, LPTSTR и еще много ))
А затем, что они все обозначают разные вещи. По крайней мере в С (что ни говори, а WinAPI изначально пишется под С, так что надо пользоваться теми типами, которые пришли оттуда). Я не просто так всегда говорю: пользуйтесь правильными типами переменных, а не просто подходящими. Сегодня WPARAM - это Integer, завтра положение может поменяться.
В частности, LPSTR - указатель на строку LPCSTR - константный указатель на строку LPTSTR - указатель на массив TCHAR-ов LPCTSTR - константный указатель на массив TCHAR-ов В зависимости от того, Юникодный или нет проект - все 4 типа могут быть различными...
Цитата
И что значат __out и __in в описании? это же СИ -шное описание, т.е. это зарезервированые слова? или только для информативности?
Без понятия, я не пользуюсь Microsoft-овскими компиляторами, а для себя сделал очень просто:
#define __in #define __out
т.е., ассоциировать __in, __out и еще несколько таких параметров с пустотой, чтоб не выдавало ошибок при компиляции, так что теперь у меня "бесплатный" довесок, показывающий, входной это параметр функции, или выходной...