Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить хэндл child-окна в котором нажата кнопка? [D7, Win2k]


YuraR ©   (2003-08-19 15:02:00) 

Здраствуйте!

Есть проблема следующего характера: в child-окне нажимаються клавиши. Некоторые из них мне нужно менять на другие. Как получить хэндл этого child-окна.
Нажимаемые клавиши отлавливаю через хук на KeyDown. Хєндл пытаюсь получить с помощью GetActiveWindow, но возвращается хендл MDI-окна.

Плиз, подскажите куда копать?


YuraR   (2003-08-20 18:25:00) [1]

Я тоже пришел к такому-же выводу.
Этот перехватчик страно и буквы перехватывает: только английские и часть руских ъэюбїєж.

То что я хотел сделать я сделал. Вообщем тему можно закрывать.

Большое спасибо.


Игорь Шевченко   (2003-08-20 17:51:00) [2]

Я пробовал, но использовал свой код. У меня окно было :) Может, в перехватчике проблема ?


YuraR   (2003-08-20 17:48:00) [3]

По справке оно-то так, а в программе не работает.

Я использовал для перехвата клавиш код из сообщения на этом форуме "Перехватчик клавиатуры без использования dll".
Но HWND в lParam почему-то нет. Возращается 0 вне зависимости от окна или контрола. Можете попробовать сами.

Поэтому я и задал вопрос на форум.


Игорь Шевченко   (2003-08-20 15:05:00) [4]

F1 читать внимательно: lParam указывает на EVENTMSG

typedef struct tagEVENTMSG { // em
UINT message;
UINT paramL;
UINT paramH;
DWORD time;
HWND hwnd;вот оно и окно
} EVENTMSG;

hwnd

Identifies the window to which the message was posted.


YuraR   (2003-08-20 12:09:00) [5]

Устанавливается следующий хук:

SetWindowsHookEx(WH_JOURNALRECORD,@Proc,HInstance,0)


Игорь Шевченко   (2003-08-19 17:03:00) [6]

Упс! Невнимательно прочитал вопрос, извиняюсь. А в хуке разве нет Handle окна, которому приходит нажатие клавиши ? Что за тип хука устанавливается ?


YuraR   (2003-08-19 16:44:00) [7]

Игорь. GetParent требует HWND, а где его взять для клавиши клавиатуры я не знаю.
Я сдела пока так в функции обработки хука:
h1 := GetActiveWindow;
GetWindowText(h1,t,255);
Form1.ListBox1.Items.Add("MDI - "+t);

repeat
h0:=GetWindow(h1,GW_CHILD);
GetWindowText(h0,t,255);
Form1.ListBox1.Items.Add("Child - "+t);
h1:=h0;
until h0=0;

Но хочеться сделать это без перебора всех child.


ermserg   (2003-08-19 16:30:00) [8]

ili tak:
lHandle := SendMessage(Self.ClientHandle, WM_MDIGETACTIVE, 0, 0)


ermserg   (2003-08-19 16:27:00) [9]

TForm.ActiveMDIChild ne pomozhet?


Игорь Шевченко   (2003-08-19 15:38:00) [10]

GetParent от кнопки ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо