Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

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

Последний раз редактировалось Homez, 26.04.2011 в 15:15.
Ответить с цитированием
  #2  
Старый 26.04.2011, 15:47
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Быстро отправляемся учить мат. часть:
Код:
function EnumWindowsProc(h: HWND; lParam: LPARAM): BOOL; stdcall;

ЗЫЖ По существу при неправильном вызове callback функции ты неправильно получаешь входные параметры.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

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

О, заработало! Премного благодарен!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter