Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

VCL и SetWondowsHookEx

259
14 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
В VCL проекте в CBuilder v6.0 мне необходимо сворачивать и разворачивать приложение по нажатию комбинаций клавишь Alt+F2 в зависимость от состояния главной формы MainForm.
Если MainForm->Visible = true, свернуть и если false развернуть. В методе FormHide ставлю вызов:
 
Код:
hk = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)_KeyHook,dllKeyHookModID,0);

hk получает handler, но процедура обработки не вызывается. Процедура обработки находится в отдельной dll.
 
Код:
hk = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)_KeyHook,NULL,0);
Не катит. hk устоичиво получает значение NULL.
Причем если делать Hook в активной форме все работает. Такое ощущение, что TApplication перехватывает этот Hook и заменяет его своим оброботчиком, а по методу Hide() делает UnhookWindowsHookEx. Вобщем я чего-то, где-то не догоняю.
ЗЫ: Оговорюсь сразу - VCL проект это важно. Необходимо решение именно для VCL, если оно вообще есть.
Вот мой код:
Код:
TForm1 *Form1;
HHOOK hk;
HINSTANCE dllKeyHookModuleId;
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    dllKeyHookModuleId = LoadLibrary("Project2.dll");
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    UnhookWindowsHookEx(hk);
}
void __fastcall TForm1::FormHide(TObject *Sender)
{
    hk = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)_KeyHook,dllKeyHookModuleId,0);
    SetHk(hk,Handle);
}

ЗЫЫ: Прошу прощения за ошибку в названии темы. Рука дрогнула.
10
14 января 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by AlexandrVSmirno
В VCL проекте в CBuilder v6.0 мне необходимо сворачивать и разворачивать приложение по нажатию комбинаций клавишь Alt+F2 в зависимость от состояния главной формы MainForm.


А нажатие ALT+F2 должно действовать глобально или только в пределах твоей программы?

259
15 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by smartsoft

А нажатие ALT+F2 должно действовать глобально или только в пределах твоей программы?


Глобально.

259
20 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by AlexandrVSmirno

Глобально.


Я так понимаю тему можно закрыть. Мыслей свежих нет ни у кого, включая и меня. WinAPI - шники откликнитесь. Может ВЫ что присоветуете?

10
20 января 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by AlexandrVSmirno
Такое ощущение, что TApplication перехватывает этот Hook и заменяет его своим оброботчиком, а по методу Hide() делает UnhookWindowsHookEx.


Только не говори, что нет под рукой исходников или не знаешь Паскаля. Новички подобными вопросами не задаются.

Только что посмотрел в исходнике Forms.pas - TApplication действительно заменяет хук на собственный для обработки хинтов. Там еще какая-то хрень с потоками используется. Только разбираться непосредстенно не стал...

На твоем бы месте я бы давно расковырял бы исходники VCL и попробовал бы обойти проблему.

2.3K
21 января 2005 года
ART-CODE
134 / / 15.11.2004
Сам пока не делал (сильно не ругайте), но вообще -то общеизвестно,
чтобы ХУК работал не только когда активна форма твоей программы, НУЖНО этот ХУК загружать из библиотеки ( DLL) - может вопрос в способе ее загрузки -статический /динамический ?
Что-то я не нашел в твоем коде GetProcAddress...
см. про библиотеки здесь:
http://www.firststeps.ru/cbuilder/r.php?92
http://www.firststeps.ru/cbuilder/r.php?91
http://www.firststeps.ru/mfc/winapi/r.php?152
259
21 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by smartsoft

Только не говори, что нет под рукой исходников или не знаешь Паскаля. Новички подобными вопросами не задаются.

На твоем бы месте я бы давно расковырял бы исходники VCL и попробовал бы обойти проблему.


Критику принимаю и приступаю к действиям.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог