Показать сообщение отдельно
  #1  
Старый 26.04.2011, 15:10
Homez Homez вне форума
Прохожий
 
Регистрация: 10.03.2011
Сообщения: 20
Репутация: 10
По умолчанию Получения хэндлов окон определенного класса

Уважаемые форумчане, помогите перенести код с 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, но так тоже не работает Такое впечатление, что вместо хэндлов реальных окон мне подсовывается какой-то мусор.
Ответить с цитированием