Уважаемые форумчане, помогите перенести код с C++ на Delphi!
В моей программе мне нужно найти все окна определенного класса, для этого я использую функцию Win32 API EnumWindows. Вот код. Это тестовый пример на C++, который работал:
Код:
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
char ClassName[256];
GetClassName(hwnd, ClassName, 256);
if (strcmp(ClassName, "SomeClass") == 0)
MessageBox(NULL, "Wow!", "", MB_OK);
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
EnumWindows(EnumWindowsProc, 0);
return 0;
}
То есть, если встречается очередное окно класса SomeClass, то просто выводится Вау.
Программу свою я пишу на Delphi, там, разумеется, вместо вывода сообщения подразумевается некоторая обработка. Но у меня не получилось заставить "перевод" на Delphi работать. Подсобите, пожалуйста!
Вот код на Delphi, который не работает. Он должен выводить в мемо список классов всех окон в системе, но чудесным образом получается список символов кодировки Windows-1251:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Windows.EnumWindows(@EnumWindowsProc, 0);
end;
function EnumWindowsProc(h: HWND; lParam: LPARAM): BOOL;
var
CN: array [0..1023] of Char;
begin
GetClassName(h, @CN, 1024);
Form1.Memo1.Lines.Add(CN);
Result := True;
end;
Может, мне нужно убрать собаку из @CN, но так тоже не работает

Такое впечатление, что вместо хэндлов реальных окон мне подсовывается какой-то мусор.