|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получения хэндлов окон определенного класса
Уважаемые форумчане, помогите перенести код с 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
|
||||
|
||||
Быстро отправляемся учить мат. часть:
Код:
function EnumWindowsProc(h: HWND; lParam: LPARAM): BOOL; stdcall; ЗЫЖ По существу при неправильном вызове callback функции ты неправильно получаешь входные параметры. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
О, заработало! Премного благодарен!
|