![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить хэндл 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 от кнопки ?