Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.27;
Скачать: CL | DM;

Вниз

Как получить хэндл child-окна в котором нажата кнопка?   Найти похожие ветки 

 
YuraR   (2003-08-19 15:02) [0]

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

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

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


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

GetParent от кнопки ?


 
ermserg ©   (2003-08-19 16:27) [2]

TForm.ActiveMDIChild ne pomozhet?


 
ermserg ©   (2003-08-19 16:30) [3]

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


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

Игорь. 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.


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

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


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

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

SetWindowsHookEx(WH_JOURNALRECORD,@Proc,HInstance,0)


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

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 17:48) [8]

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

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

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


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

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


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.10.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
14-89554
SergP
2003-09-19 21:08
2003.10.27
Delphi глючит...


14-89511
isko
2003-10-09 09:43
2003.10.27
модератор, дорогой


1-89358
Eagle Owl
2003-10-15 12:59
2003.10.27
Сервисное приложение


14-89510
Dmitriy O.
2003-10-09 08:48
2003.10.27
Эволюция программы или


3-89189
GreatMaster
2003-10-06 11:19
2003.10.27
---|Ветка была без названия|---